【问题标题】:How to use an action listener to check if a certain button was clicked?如何使用动作监听器来检查某个按钮是否被点击?
【发布时间】:2011-09-04 15:14:26
【问题描述】:

我的程序中有 4 个按钮列表排列成一列。到目前为止,我有 4 个循环来检查是否单击了按钮。有没有一种简单的方法来检查是否单击了任何按钮,而不是遍历每个列表以查看是否单击了某个按钮。必须有一种更简单的方法来检查“actionSource == anybutton”是否...

【问题讨论】:

    标签: java button actionlistener


    【解决方案1】:

    为每个按钮使用匿名内部类:

    JButton button = new JButton("Do Something");
    button.addActionListener( new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            System.out.println("Do Something Clicked");
        }
    });
    

    或者如果你的逻辑是相关的,那么你可以共享一个监听器:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class ButtonCalculator extends JFrame implements ActionListener
    {
        private JButton[] buttons;
        private JTextField display;
    
        public ButtonCalculator()
        {
            display = new JTextField();
            display.setEditable( false );
            display.setHorizontalAlignment(JTextField.RIGHT);
    
            JPanel buttonPanel = new JPanel();
            buttonPanel.setLayout( new GridLayout(0, 5) );
            buttons = new JButton[10];
    
            for (int i = 0; i < buttons.length; i++)
            {
                String text = String.valueOf(i);
                JButton button = new JButton( text );
                button.addActionListener( this );
                button.setMnemonic( text.charAt(0) );
                buttons[i] = button;
                buttonPanel.add( button );
            }
    
            getContentPane().add(display, BorderLayout.NORTH);
            getContentPane().add(buttonPanel, BorderLayout.SOUTH);
            setResizable( false );
        }
    
        public void actionPerformed(ActionEvent e)
        {
            JButton source = (JButton)e.getSource();
            display.replaceSelection( source.getActionCommand() );
        }
    
        public static void main(String[] args)
        {
            UIManager.put("Button.margin", new Insets(10, 10, 10, 10) );
            ButtonCalculator frame = new ButtonCalculator();
            frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
            frame.pack();
            frame.setLocationRelativeTo( null );
            frame.setVisible(true);
        }
    }
    

    【讨论】:

    • Camickr 在我眼中是 Swing 的权威。
    • 分享一个听众...很好,感谢您的建议!效果很好!
    【解决方案2】:

    您可以为每个按钮添加一个单独的侦听器,为每个按钮添加一个通用侦听器。对通用侦听器进行编程以响应“按下的任何按钮”。

    【讨论】:

      【解决方案3】:

      任何时候你点击一个按钮,它都会触发actionPerformed方法,不管你按下的是哪个按钮。

      public void actionPerformed(ActionEvent event) {
          Object source = event.getSource();
          if (source instanceof JButton) System.out.println("You clicked a button!");
      }
      

      【讨论】:

      • 我还有其他带有侦听器的对象,例如组合框和菜单项。我只需要按钮来完成某项任务,而不是所有带有监听器的项目。
      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 2021-03-08
      • 2013-05-09
      • 2013-07-26
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多