2014-07-16 135 views
1

我想要按钮,我点击以禁用并显示图像,但下面的程序是禁用框架中的最后一个按钮,无论我点击哪个按钮,我做错了什么? (随机文本...随机文本...因为它说:“您的文章主要是代码,请添加一些更详细)错误的按钮激活

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

到目前为止,您已经提出了7个问题,并且从未接受过答案。你是否知道你应该接受最能帮助你的答案,所以回答者会因为他的帮助而获得回报?你知道如何接受答案吗?请看看这里:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

对不起,我真的不知道:( – user3798851

回答

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); 
       } 
      } 
     } 
+0

而且代码仍然会出错 – biziclop

+0

@biziclop为什么这样? –

+0

thankyou :) :) :) – user3798851

3

动作监听仅指button,这将是值了最后一个按钮创建

+0

并且让事情变得更糟,所有其他的按钮甚至没有引用,因为你在'addButton()'中覆盖了它,所以为了准确回答这个问题,你做错了什么是'addButton()'方法,你每次都会覆盖'button'的值而不检查任何东西 – biziclop