36
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它们,以便在单击它们时可以在程序中调用它们?

4

4 回答 4

62

两种方式:

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())。

于 2008-11-12T18:49:17.040 回答
8

最好的办法是查看Java Swing 教程,特别是关于 Buttons 的教程

简短的代码片段是:

jBtnDrawCircle.addActionListener( /*class that implements ActionListener*/ );
于 2008-11-12T18:46:08.137 回答
2

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

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
            }
        });
    }
}
于 2018-11-11T10:34:59.380 回答
0

我没有完全遵循,但要添加一个动作监听器,你只需调用addActionListener(来自抽象按钮)。如果这不能完全回答您的问题,您能否提供更多详细信息?

于 2008-11-12T18:48:27.820 回答