Swing button repaint issue
        Posted  
        
            by KáGé
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by KáGé
        
        
        
        Published on 2010-04-16T01:39:35Z
        Indexed on 
            2010/04/16
            1:43 UTC
        
        
        Read the original article
        Hit count: 502
        
Hello,
I'm new to java and I have to get a school project done by Sunday and got a problem.
Here's the code:
private abstract class GamePanel {
    JPanel panel = null;
}
private class PutPanel extends GamePanel {
    JButton putShip1 = new JButton("");
    JButton putShip2 = new JButton("");
    JButton putShip3 = new JButton("");
    JButton putShip4 = new JButton("");
    ShipDirection ship1Direction = ShipDirection.NORTH;
    ShipDirection ship2Direction = ShipDirection.NORTH;
    ShipDirection ship3Direction = ShipDirection.NORTH;
    ShipDirection ship4Direction = ShipDirection.NORTH;
    JButton startButton = new JButton("Start game");
    public PutPanel(){
        this.panel = new JPanel();
        panel.setSize(200, Torpedo.session.map.size*Field.buttonSize+300);
        panel.setBackground(Color.blue);
        putShip1.setSize(90, 90);
        putShip1.setLocation(55, 5);
        putShip1.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship1/full_north.png", null));
        putShip2.setSize(90, 90);
        putShip2.setLocation(55, 105);
        putShip2.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship2/full_north.png", null));
        putShip3.setSize(90, 90);
        putShip3.setLocation(55, 205);
        putShip3.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship3/full_north.png", null));
        putShip4.setSize(90, 90);
        putShip4.setLocation(55, 305);
        putShip4.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship4/full_north.png", null));
        startButton.setSize(150, 30);
        startButton.setLocation(20, Torpedo.session.map.size*Field.buttonSize+205);
        panel.add(putShip1);
        panel.add(putShip2);
        panel.add(putShip3);
        panel.add(putShip4);
        panel.add(startButton);
        startButton.addActionListener(startButton());
        startButton.addActionListener(putShip1());
        startButton.addActionListener(putShip2());
        startButton.addActionListener(putShip3());
        startButton.addActionListener(putShip4());
        panel.setLayout(null);
        panel.setVisible(true);
    }
    private ActionListener startButton(){
        return new ActionListener(){
             public void actionPerformed(ActionEvent e) {
                 putPanel.panel.setVisible(false);
                 actionPanel.panel.setVisible(true);
             }
        };
    }
    private ActionListener putShip1(){
        return new ActionListener(){
             public void actionPerformed(ActionEvent e) {
                 selectedShip = 1;
                 putShip1.setBackground(Color.red);
                 putShip2.setBackground(null);
                 putShip3.setBackground(null);
                 putShip4.setBackground(null);
                 switch(ship1Direction){
                    case NORTH: ship1Direction = ShipDirection.EAST;
                                putShip1.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship1/full_east.png", null));
                                break;
                    case EAST:  ship1Direction = ShipDirection.SOUTH;
                                putShip1.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship1/full_south.png", null));
                                break;
                    case SOUTH: ship1Direction = ShipDirection.WEST;
                                putShip1.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship1/full_west.png", null));
                                break;
                    case WEST:  ship1Direction = ShipDirection.NORTH;
                                putShip1.setIcon(createImageIcon(Torpedo.session.map.shipPath+"/ship1/full_north.png", null));
                                break;
                 }
                 putShip1.repaint();
                 putShip2.repaint();
                 putShip3.repaint();
                 putShip4.repaint();
                 panel.repaint();
                 JOptionPane.showMessageDialog(new JFrame(), "Repaint finished", "Repaint status info", JOptionPane.INFORMATION_MESSAGE); //this here hangs the program when the method is finally called
             }
        };
When one of the putShip* buttons is clicked, it should rotate its own icon right 90° (means changing it to the next image), but it does nothing until the startButton is clicked, which changes the panel to an other one. (Only the first button's actionListener is here, the others' are practically the same). The panel is in a JFrame with two other panels that yet do nothing.
How could I make it work properly?
Thank you.
© Stack Overflow or respective owner