为什么我的 ActionListener 不能为我的按钮工作?
Why isn't my ActionListener working for my buttons?
我在单击按钮时遇到了一些问题。
这是我声明按钮的地方
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个按钮的详细信息,但还有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);
这是我将按钮添加到中心面板的地方。然后将我的中心面板添加到我的主面板。然后将我的主面板添加到我的框架中。
中心面板
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 扩展到我所有按钮所在的辅助面板。
感谢您的帮助。
--
授予
您将 JButton 声明为 class 字段,但您从未初始化它们。 Insted 您通过以下方式创建新的 JButton:
JButton btnsuit1 = new JButton();
因此,btnsuit1.setVisible(false)
中的 btnsuit1
可能为空。
尝试更改 btnsuit1
初始化:
btnsuit1 = new JButton();
应该可以。
我在单击按钮时遇到了一些问题。
这是我声明按钮的地方
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个按钮的详细信息,但还有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);
这是我将按钮添加到中心面板的地方。然后将我的中心面板添加到我的主面板。然后将我的主面板添加到我的框架中。
中心面板
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 扩展到我所有按钮所在的辅助面板。
感谢您的帮助。
--
授予
您将 JButton 声明为 class 字段,但您从未初始化它们。 Insted 您通过以下方式创建新的 JButton:
JButton btnsuit1 = new JButton();
因此,btnsuit1.setVisible(false)
中的 btnsuit1
可能为空。
尝试更改 btnsuit1
初始化:
btnsuit1 = new JButton();
应该可以。