gpt4 book ai didi

java - Swing按钮重画问题

转载 作者:行者123 更新时间:2023-12-01 16:05:50 25 4
gpt4 key购买 nike

我是 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°(意味着将其更改为下一个图像),但在单击 startButton 之前它不会执行任何操作,这会将面板更改为另一个面板。 (这里只有第一个按钮的actionListener,其他的几乎相同)。该面板与其他两个面板位于 JFrame 中,但尚未执行任何操作。

怎样才能让它正常工作?

谢谢。

最佳答案

正如用户 Chuk Lee 所说,也将 ActionListener 添加到 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);

关于java - Swing按钮重画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2650064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com