我希望我点击的按钮被禁用并显示图像但是以下程序禁用框架中的最后一个按钮,无论我点击哪个按钮,我做错了什么?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class TicTacToe{
public static void main(String args[]){
EventQueue.invokeLater(new Runnable(){
public void run(){
JFrame frame=new GameFrame();
frame.setTitle("BATTLESHIPS");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Image img=new ImageIcon("icon.gif").getImage();
frame.setIconImage(img);
}
});
}
}
class GamePanel extends JPanel{
private JPanel panel;
private boolean start;
private ActionListener listener;
public GamePanel(){
start=true;
setLayout(new BorderLayout());
panel=new JPanel();
panel.setLayout(new GridLayout(3,3));
listener=new ClickButton();
addButton("");
addButton("");
addButton("");
addButton("");
addButton("");
addButton("");
addButton("");
addButton("");
addButton("");
add(panel,BorderLayout.CENTER);
}
void addButton(String label){
JButton button=new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
class ClickButton implements ActionListener{
public void actionPerformed(ActionEvent event){
String input=event.getActionCommand();
if(start){
{
Image img=new ImageIcon("icon.gif").getImage();
button.setText("");
button.setIcon(new ImageIcon(img));
button.setEnabled(false);
}
}
}
}
}
class GameFrame extends JFrame{
public GameFrame(){
add(new GamePanel());
pack();
}
}
答案 0 :(得分:6)
这是因为您已禁用button
,这是您添加的最后一个。
您应该使用点击的按钮,您可以使用event.getSource()
获取该按钮。它应该是这样的:
public void actionPerformed(ActionEvent event){
String input=event.getActionCommand();
if(start){
{
Image img=new ImageIcon("icon.gif").getImage();
JButton clicked = (JButton)event.getSource();
clicked.setText("");
clicked.setIcon(new ImageIcon(img));
clicked.setEnabled(false);
}
}
}
答案 1 :(得分:3)
动作侦听器仅引用button
,它将是最后创建的按钮的值。