Java 摆动按钮重新喷漆问题

Java 摆动按钮重新喷漆问题,java,swing,button,repaint,actionlistener,Java,Swing,Button,Repaint,Actionlistener,我是java新手,我必须在周日之前完成一个学校项目,但遇到了一个问题 代码如下: private abstract class GamePanel { JPanel panel = null; } private class PutPanel extends GamePanel { JButton putShip1 = new JButton(""); JButton putShip2 = new JButton(""); JButton putShip3 =

我是java新手,我必须在周日之前完成一个学校项目,但遇到了一个问题

代码如下:

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
             }
        };
单击其中一个putShip*按钮时,它应该将自己的图标向右旋转90°(意味着将其更改为下一个图像),但在单击开始按钮之前,它不会执行任何操作,从而将面板更改为另一个。(只有第一个按钮的actionListener在这里,其他按钮几乎相同)。该面板位于一个JFrame中,另外两个面板什么也不做

我怎样才能使它正常工作


谢谢。

如用户Chuk Lee所说,也将
ActionListener
s添加到
putShip*
按钮中。这里有一些代码供您添加:

    startButton.addActionListener(startButton());
    startButton.addActionListener(putShip1());
    startButton.addActionListener(putShip2());
    startButton.addActionListener(putShip3());
    startButton.addActionListener(putShip4());

    putShip1.addActionListener(putShip1());
    putShip2.addActionListener(putShip2());
    putShip3.addActionListener(putShip3());
    putShip3.addActionListener(putShip3());

    panel.setLayout(null);
    panel.setVisible(true);

这是因为您没有将侦听器添加到除startButtonOhshit:D之外的其他按钮,那么一定很晚了。。。谢谢:P@Chuk李:你应该把这个作为答案,这样才能被接受。