Programming Forums
User Name Password Register
 

RSS Feed
FORUM INDEX | TODAY'S POSTS | UNANSWERED THREADS | ADVANCED SEARCH

Reply
 
Thread Tools Display Modes
Old Oct 22nd, 2007, 11:24 PM   #1
Wizard1988
Professional Programmer
 
Wizard1988's Avatar
 
Join Date: Oct 2005
Location: Chitown
Posts: 414
Rep Power: 3 Wizard1988 is on a distinguished road
Send a message via AIM to Wizard1988
Angry Painting, repainting issues

I have two classes which represent squares. The first class represents tiles which can contain different walls or simply be empty. My second class (Robot) is very similar to the Square class but it has the ability to move.

My problem is that I can not get instances of the Robot class to repaint after they move.

import java.awt.*;

enum TYPE
{
    ROBOT,BLANK,LEFT,TOP,RIGHT,BOTTOM,NW_L,NE_L,SE_L,SW_L
}

enum Direction
{
    N,E,S,W
}

class Square extends Rectangle
{
    protected     TYPE type;
    protected     Color color;
    protected     String label;
    private     boolean occupied;
    protected     boolean visible;
    private      static Graphics2D g2;
    
    public Square(int x, int y, TYPE t)
    {
        this(x,y,t,"",Color.BLUE);
    }
    
    public Square(int x, int y, TYPE t, String l, Color c)
    {    
        this.x            = x;
        this.y            = y;
        this.width        = GameManager.SQUARE_SIZE;
        this.height        = GameManager.SQUARE_SIZE;
        this.type         = t;
        this.label        = l;
        this.color        = c;
        this.visible    = true;
    }
    
    public void setOccupied(boolean status)
    {
        this.occupied = status;
    }
    
    public boolean isOccupied()
    {
        return occupied;
    }
    
    public void setLabel(String l)
    {
        this.label = l;
    }
    
    public String getLabel()
    {
        if(label == null)
        {
            return "";
        }
        return label;
    }
    
    public void setVisible(boolean visible)
    {
        this.visible = visible;
    }
    
    public boolean isVisible()
    {
        return visible;
    }
    
    public void drawLabel()
    {
        if(label != null)
        {
            g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
            g2.setColor(Color.BLACK);                          
            g2.drawString(label,(this.x+(this.width/2)- label.length()/2*6)-4,this.y+(this.width/2)+5);           
          }
    }
    
    public void redraw()
    {
        draw(g2);    
    }
    
    public void draw(Graphics g)
    {
        if(!visible)
        {
            return;
        }
        
        if(g2 == null)
        {
            g2 = (Graphics2D)g;
        }
        
        g2.setColor(color);
        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.45f));
        
        switch(type)
        {
            case ROBOT:
            {
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fill(this);
                break;
            }
            
            case BLANK:
            {
                g2.fill(this);
                break;
            }
            
            case LEFT:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x,this.y,2,this.height);
                break;
            }
            
            case TOP:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x,this.y,this.width,2);
                break;
            }
            
            case RIGHT:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x+(this.width-2),this.y,2,this.height);
                break;
            }
            
            case BOTTOM:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x,this.y+this.height-2,this.width,2);
                break;
            }
            
            case NW_L:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x,this.y,this.width,2);
                g2.fillRect(this.x,this.y,2,this.height);
                break;
            }
            
            case NE_L:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x+(this.width-2),this.y,2,this.height);
                g2.fillRect(this.x,this.y,this.width,2);
                break;
            }
            
            case SE_L:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x+(this.width-2),this.y,2,this.height);
                g2.fillRect(this.x,this.y+this.height-2,this.width,2);
                break;
            }
            
            case SW_L:
            {
                g2.fill(this);
                g2.setColor(Color.BLACK);
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1));
                g2.fillRect(this.x,this.y+this.height-2,this.width,2);
                g2.fillRect(this.x,this.y,2,this.height);
                break;
            }
        }
    }
}
import java.awt.*;
import java.awt.Graphics2D;

class Robot extends Square
{
    public Robot(int x, int y, Color color)
    {
        super((4 + (GameManager.SQUARE_GAP + GameManager.SQUARE_SIZE) * (x-1)),
              (4 + (GameManager.SQUARE_GAP + GameManager.SQUARE_SIZE) * (y-1)),
              TYPE.ROBOT,"",color);
              
        setSize(GameManager.ROBOT_SIZE,GameManager.ROBOT_SIZE);
    }
    
    public void setColor(Color c)
    {
        this.color = c;
    }
    
    public Color getColor()
    {
        return color;
    }
    
    public void move(Direction d)
    {
        int delta = (this.height + GameManager.SQUARE_SIZE);
        
        switch(d)
        {
            case N:
            {
                translate(0,-delta);
                break;
            }
            
            case E:
            {
                translate(delta,0);
                break;
            }
            
            case S:
            {
                translate(0,delta);
                break;
            }
            
            case W:
            {
                translate(-delta,0);
                break;
            }
        }
        redraw();
    }
}
import java.util.Vector;
import java.awt.Point;
import java.awt.Graphics;
import java.awt.Color;

class RobotManager
{
    private Vector             robots;
    private Robot             inFocus;
    private Point            lastClick;
    
    public RobotManager()
    {
        robots = new Vector();
    }
    
    public void addRobot(int x, int y, Color c)
    {
        robots.add(new Robot(x,y,c));
        inFocus = (Robot)robots.lastElement();
    }
    
    public void testRobots()
    {
        inFocus.move(Direction.S);
    }
    
    public void clicked(Point p)
    {
        for(int i = 0; i < robots.size(); i++)
        {
            if(((Robot)robots.elementAt(i)).contains(p))
            {
                inFocus = (Robot)robots.elementAt(i);
                lastClick = p;
                break;
            }
        }
    }
    
    public void dragged(Point p)
    {
        if((lastClick == null) || (inFocus.contains(p)))
        {
            return;
        }
        
        if(lastClick.getX() > p.getX())
        {
            inFocus.move(Direction.E);
        }else{
            inFocus.move(Direction.W);
        }
        
        if(lastClick.getY() > p.getY())
        {
            inFocus.move(Direction.S);
        }else{
            inFocus.move(Direction.N);
        }
    }
    
    public void drawRobots(Graphics g)
    {
        for(int i = 0; i < robots.size(); i++)
        {
            ((Robot)robots.elementAt(i)).draw(g);
        }
    }
}

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class GamePanel extends JPanel
{
    private GridManager         gridManager;
    private RobotManager         robotManager;
    
    public GamePanel()
    {        
        setLayout(null);
        setDoubleBuffered(true);
        gridManager     = new GridManager(16,16);
        robotManager    = new RobotManager();
        setPreferredSize(gridManager.getSize());
        
        robotManager.addRobot(1,1,Color.GREEN);
        robotManager.addRobot(3,1,Color.RED);
        
        addMouseListener(new MouseAdapter()
        {
            public void mouseClicked(MouseEvent e)
            {
                robotManager.testRobots();
                repaint();
            }
        });
    }
    
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        gridManager.drawBoard(g);
        robotManager.drawRobots(g);
    }
}
When I click the panel just goes gray.... What can be done to fix this???

Any help, tips and or constructive criticism will be appreciated.
__________________
JG-Webdesign
Wizard1988 is offline   Reply With Quote
Reply

Bookmarks

« Previous Thread in Forum | Next Thread in Forum »

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
GUI issues fresher Java 3 Jan 16th, 2007 9:26 AM
Table issues... Glastea HTML / XHTML / CSS 2 Jan 12th, 2007 1:54 AM
I have an idea, but copyright issues. Booooze Project Ideas 25 Aug 3rd, 2006 9:31 PM
SimpleXML issues niteice PHP 9 Jun 23rd, 2006 4:00 PM




DaniWeb IT Discussion Community
All times are GMT -5. The time now is 2:56 PM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC