2015-05-05 50 views
1

我在点击一个按钮时遇到了一些麻烦。为什么我的ActionListener不能用于我的按钮?

  1. 这是我宣布我的按钮

    public class DoND extends JFrame implements ActionListener { 
    
    public JButton btnsuit1, btnsuit2, btnsuit3, btnsuit4, btnsuit5, btnsuit6, btnsuit7, btnsuit8, btnsuit9, btnsuit10, btnsuit11, btnsuit12, btnsuit13, btnsuit14, btnsuit15, btnsuit16, btnsuit17, btnsuit18, btnsuit19, btnsuit20, btnsuit21, btnsuit22, btnsuit23, btnsuit24, btnsuit25, btnsuit26; 
    
    public static void main(String[] args) { 
    
        new DoND(); 
    } 
    
  2. 这是所有关于我的按钮的详细信息。 (我只给出了2个按钮的详细信息,但也有24多个按钮。)

    JButton btnsuit1 = new JButton(); 
    btnsuit1.setIcon(new ImageIcon("images\\suitcases\\case1.png")); 
    btnsuit1.setPreferredSize(new Dimension(200, 150)); 
    btnsuit1.setHorizontalAlignment(SwingConstants.CENTER); 
    btnsuit1.addActionListener(this); 
    
    
    JButton btnsuit2 = new JButton(); 
    btnsuit2.setIcon(new ImageIcon("images\\suitcases\\case2.png")); 
    btnsuit2.setPreferredSize(new Dimension(200, 150)); 
    btnsuit2.setHorizontalAlignment(SwingConstants.CENTER); 
    btnsuit2.addActionListener(this); 
    
  3. 这是我添加的按钮到我中心面板。然后将我的中心面板添加到我的主面板。然后将我的主面板添加到我的框架。

中心面板

JPanel centerPanel = new JPanel(); 
    centerPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    centerPanel.setBackground(Color.BLACK); 
    centerPanel.add(btnsuit1); 
    centerPanel.add(btnsuit2); 

主面板

JPanel mainPanel = new JPanel(); 
    mainPanel.setLayout(new BorderLayout()); 
    mainPanel.setBackground(Color.BLACK); 
    mainPanel.add(northPanel, BorderLayout.NORTH); 
    mainPanel.add(centerPanel, BorderLayout.CENTER); 
    mainPanel.add(eastPanel, BorderLayout.EAST); 
    mainPanel.add(westPanel, BorderLayout.WEST); 
    mainPanel.add(southPanel, BorderLayout.SOUTH); 

框架

setContentPane(mainPanel); 
    setSize(3000, 1000); 
    setTitle("Deal or No Deal"); 
    setLocationRelativeTo(null); 
    setResizable(true); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
  • ,这是我的动作监听。

    public void actionPerformed(ActionEvent e) { 
    
    if (e.getSource() == btnsuit1) 
    { 
        btnsuit1.setVisible(false); 
    } 
    
    if (e.getSource() == btnsuit2) 
    { 
        btnsuit2.setVisible(false); 
    } 
    
  • 我不知道为什么什么也没有发生,但我搜索周围,我认为有几种可能性。

    a)我添加ActionListener的按钮与那些按钮不同,ActionPerformed正在搜索。

    b)我必须将ActionListener扩展到所有按钮所在的辅助面板。

    我感谢您的帮助。

    -

    格兰特

    +0

    您可以发布[MCVE](http://stackoverflow.com/help/mcve)而不是整个程序的断开部分吗? actionPerformed()方法是否被调用?它是否曾经输入过这些陈述?使用调试器或至少一些打印语句来查明。 –

    +1

    哎呀,那一定是永远代码。让所有这些按钮存储和创建的更好的方法是一个数组和一个for循环。关于java数组/ for循环的一个很好的教程是[here](http://www.tutorialspoint.com/java/java_arrays.htm)。此外,因为你正在学习Java,我会建议一本好书。我使用的是Java编程简介,综合版本。 –

    回答

    2

    你宣布你的Jbutton将作为类字段,但你永远不初始化它们。 insted的您创建的新的JButton:

    JButton btnsuit1 = new JButton(); 
    

    所以,在btnsuit1.setVisible(false)btnsuit1可能是零。 尝试改变btnsuit1初始化:

    btnsuit1 = new JButton(); 
    

    它应该工作。

    +0

    非常感谢你! –

    相关问题