【问题标题】:How do you add an ActionListener onto a JButton in Java如何在 Java 中将 ActionListener 添加到 JButton
【发布时间】:2023-02-02 10:09:58
【问题描述】:
private JButton jBtnDrawCircle = new JButton("Circle");
private JButton jBtnDrawSquare = new JButton("Square");
private JButton jBtnDrawTriangle = new JButton("Triangle");
private JButton jBtnSelection = new JButton("Selection");

我如何向这些按钮添加动作侦听器,以便我可以从主要方法对它们调用 actionperformed,这样当它们被单击时我可以在我的程序中调用它们?

【问题讨论】:

    标签: java swing user-interface jbutton actionlistener


    【解决方案1】:

    两种方式:

    1.在你的类中实现 ActionListener,然后使用 jBtnSelection.addActionListener(this); 之后,你必须定义一个 menthod,public void actionPerformed(ActionEvent e)。但是,对多个按钮执行此操作可能会造成混淆,因为 actionPerformed 方法必须检查每个事件的源 (e.getSource()) 以查看它来自哪个按钮。

    2.使用匿名内部类:

    jBtnSelection.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
        selectionButtonPressed();
      } 
    } );

    稍后,您必须定义selectionButtonPressed()。 当您有多个按钮时,这种方法效果更好,因为您对用于处理操作的各个方法的调用紧挨着按钮的定义。

    2、更新。由于 Java 8 引入了 lambda 表达式,您可以说与 #2 基本相同的内容,但使用更少的字符:

    jBtnSelection.addActionListener(e -> selectionButtonPressed());
    

    在本例中,e 是 ActionEvent。这是有效的,因为 ActionListener 接口只有一个方法,actionPerformed(ActionEvent e)

    第二种方法还允许您直接调用selectionButtonPressed 方法。在这种情况下,如果发生其他一些操作,您也可以调用 selectionButtonPressed() - 例如,当计时器关闭或其他情况时(但在这种情况下,您的方法将被命名为不同的东西,可能是 selectionChanged())。

    【讨论】:

    • @Sara - 很高兴有帮助!如果您能想到任何进一步的说明,我很乐意将它们添加到此答案中。
    • 当有人问:组件如何处理自己的事件?这个问题的答案是像你在这里展示的那样使用匿名内部类吗?
    • 不必要。您可以拥有一个自定义组件(例如,扩展 JComponent 的组件)并实现 ActionListener、MouseListener 等。
    • 您不必为 actionPerformed 添加 @Override 吗?
    • @DavidKoelle - 那么,在一个 actionPerformed() 方法中使用多个 if(ev.getSource()) 语句有什么缺点?它会大大降低你的程序速度吗?还是为了可读性?谢谢。
    【解决方案2】:

    最好的办法是查看Java Swing tutorials,特别是tutorial on Buttons

    短代码 sn-p 是:

    jBtnDrawCircle.addActionListener( /*class that implements ActionListener*/ );
    

    【讨论】:

      【解决方案3】:

      我不知道这是否有效,但我创建了变量名

      public abstract class beep implements ActionListener {
          public static void main(String[] args) {
              JFrame f = new JFrame("beeper");
              JButton button = new JButton("Beep me");
              f.setVisible(true);
              f.setSize(300, 200);
              f.add(button);
              button.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      // Insert code here
                  }
              });
          }
      }
      

      【讨论】:

        【解决方案4】:

        要添加一个动作侦听器,您只需从抽象按钮调用addActionListener

        【讨论】:

          猜你喜欢
          • 2010-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-07
          • 2013-10-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多