如何在 Java 中将 ActionListener 添加到 JButton 上

Posted

技术标签:

【中文标题】如何在 Java 中将 ActionListener 添加到 JButton 上【英文标题】:How do you add an ActionListener onto a JButton in Java 【发布时间】:2010-09-22 01:03:13 【问题描述】:
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,这样当它们被点击时我可以在我的程序中调用它们?

【问题讨论】:

【参考方案1】:

两种方式:

1. 在您的类中实现 ActionListener,然后使用 jBtnSelection.addActionListener(this); 稍后,您必须定义一个方法 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(来自抽象按钮)。如果这不能完全回答您的问题,您能否提供更多详细信息?

【讨论】:

以上是关于如何在 Java 中将 ActionListener 添加到 JButton 上的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中将字符串读入 inputStream? [复制]

如何在 Java 11 中将 JavaFX 运行时添加到 Eclipse?

如何在 Java 中将日历转换为 java.sql.Date?

如何在 Java 中将 String 转换为 int?

如何在 Java 中将 String 转换为 int?

java 如何在Java中将String转换为int?