private JButton jBtnDrawCircle = new JButton("Circle");
private JButton jBtnDrawSquare = new JButton("Square");
private JButton jBtnDrawTriangle = new JButton("Triangle");
private JButton jBtnSelection = new JButton("Selection");
如何向这些按钮添加动作侦听器,以便从主方法中我可以调用它们,这样当单击它们时我可以在程序中调用它们?
在你的类中实现 ActionListener,然后使用 actionperformed
稍后,你必须定义一个方法,
jBtnSelection.addActionListener(this);
。但是,对多个按钮执行此操作可能会令人困惑,因为 public void actionPerformed(ActionEvent e)
方法必须检查每个事件的源 (actionPerformed
) 以查看它来自哪个按钮。2. 使用匿名内部类:
e.getSource()
稍后,您必须定义
jBtnSelection.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
selectionButtonPressed();
}
} );
。 当您有多个按钮时,这种方法效果更好,因为您对处理操作的各个方法的调用就在按钮的定义旁边。
2,已更新。 由于 Java 8 引入了 lambda 表达式,您可以说与 #2 基本相同的内容,但使用更少的字符:
selectionButtonPressed()
在本例中,
jBtnSelection.addActionListener(e -> selectionButtonPressed());
是 ActionEvent。这是可行的,因为 ActionListener 接口只有一个方法,
e
。第二种方法还允许您直接调用actionPerformed(ActionEvent e)
方法。在这种情况下,如果发生其他一些操作,您也可以调用
selectionButtonPressed
- 例如,当计时器关闭或发生其他情况时(但在这种情况下,您的方法将被命名为不同的名称,也许是 selectionButtonPressed()
)。,特别是 关于按钮的教程。 简短的代码片段是:
selectionChanged()
jBtnDrawCircle.addActionListener( /*class that implements ActionListener*/ );
ActionEvent e) -> 而不仅仅是 e ->:
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
}
});
}
}