为什么我的 ActionListener 不能为我的按钮工作?

Why isn't my ActionListener working for my buttons?

我在单击按钮时遇到了一些问题。

  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);
  1. 这是我的动作侦听器。

    public void actionPerformed(ActionEvent e) {
    
    if (e.getSource() == btnsuit1)
    {
        btnsuit1.setVisible(false);
    }
    
     if (e.getSource() == btnsuit2)
    {
        btnsuit2.setVisible(false);
    }
    

我不知道为什么什么都没有发生,但我四处搜索了一下,我认为有几种可能性。

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

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

感谢您的帮助。

--

授予

您将 JButton 声明为 class 字段,但您从未初始化它们。 Insted 您通过以下方式创建新的 JButton:

JButton btnsuit1 = new JButton();

因此,btnsuit1.setVisible(false) 中的 btnsuit1 可能为空。 尝试更改 btnsuit1 初始化:

btnsuit1 = new JButton();

应该可以。