如何在 Java 中将 ActionListener 添加到 JButton

新手上路,请多包涵
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 ,以便在单击它们时我可以在我的程序中调用它们?

原文由 user37037 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 366
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() )。

原文由 David Koelle 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题