如何编写动作监听器
动作侦听器可能是最容易实现的(也是最常见的)事件处理程序。您实现一个动作侦听器,以定义当用户执行某些操作时应执行的操作。
每当用户执行动作时,就会发生动作事件。示例:用户单击button时,选择menu item,然后按text field中的 Enter 键。结果是actionPerformed
消息发送到在相关组件上注册的所有操作侦听器。
要编写动作侦听器,请按照以下步骤操作:
- 声明事件处理程序类,并指定该类实现 ActionListener interface或扩展实现 ActionListener interface的类。例如:
public class MyClass implements ActionListener {
- 将事件处理程序类的实例注册为一个或多个组件上的侦听器。例如:
someComponent.addActionListener(instanceOfMyClass);
- 包括在侦听器interface中实现方法的代码。例如:
public void actionPerformed(ActionEvent e) {
...//code that reacts to the action...
}
通常,要检测用户何时单击屏幕按钮(或键盘等效按钮),程序必须具有一个实现 ActionListener interface的对象。程序必须使用 addActionListener 方法将此对象注册为按钮(事件源)上的操作侦听器。当用户单击屏幕上的按钮时,该按钮将触发一个动作事件。这将导致调用动作侦听器的 actionPerformed 方法(ActionListener interface中的唯一方法)。该方法的单个参数是一个 ActionEvent 对象,该对象提供有关事件及其源的信息。
让我们编写一个简单的程序,该程序显示用户单击按钮的次数。首先,下面是设置 TextField,button 和 numClicks 变量的代码:
public class AL extends Frame implements WindowListener,ActionListener {
TextField text = new TextField(20);
Button b;
private int numClicks = 0;
在上面的示例中,事件处理程序类是 AL,用于实现 ActionListener。
我们想处理按钮单击事件,因此我们向按钮 b 添加一个动作侦听器,如下所示:
b = new Button("Click me");
b.addActionListener(this);
在上面的代码中,Button b 是一个组件,在该组件上注册了事件处理程序类 AL 的实例。
现在,我们要显示有关用户单击按钮的次数的文本。我们可以通过编写如下代码来做到这一点:
public void actionPerformed(ActionEvent e) {
numClicks++;
text.setText("Button Clicked " + numClicks + " times");
现在,当用户单击 Button b 时,该按钮将触发一个动作事件,该事件将调用动作侦听器的 actionPerformed 方法。每次用户按下按钮时,都会附加 numClicks 变量,并在文本字段中显示消息。
这是完整的程序(AL.java):
import java.awt.*;
import java.awt.event.*;
public class AL extends Frame implements WindowListener,ActionListener {
TextField text = new TextField(20);
Button b;
private int numClicks = 0;
public static void main(String[] args) {
AL myWindow = new AL("My first window");
myWindow.setSize(350,100);
myWindow.setVisible(true);
}
public AL(String title) {
super(title);
setLayout(new FlowLayout());
addWindowListener(this);
b = new Button("Click me");
add(b);
add(text);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
numClicks++;
text.setText("Button Clicked " + numClicks + " times");
}
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
}
更多示例:Beeper
程序示例在此跟踪的事件简介事件侦听器简介中可用。您可以在Beeper.java中找到整个程序。该部分中描述的另一个示例MultiListener.java具有两个动作源和两个动作侦听器,其中一个侦听器侦听两个源,另一个侦听器侦听一个源。
动作监听器 API
因为ActionListener
只有一种方法,所以没有相应的适配器类.
Method | Purpose |
---|---|
actionPerformed(actionEvent) | 在用户执行操作后立即调用。 |
Method | Purpose |
---|---|
String getActionCommand() | 返回与此操作关联的字符串。大多数可以触发动作事件的对象都支持称为setActionCommand 的方法,该方法可让您设置此字符串。 |
int getModifiers() | 返回一个整数,该整数表示操作事件发生时用户按下的修饰键。您可以使用ActionEvent 定义的常量SHIFT_MASK ,CTRL_MASK ,META_MASK 和ALT_MASK 来确定按下了哪些键。例如,如果用户按 Shift 键选择菜单项,则以下表达式为非零: |
actionEvent.getModifiers() & ActionEvent.SHIFT_MASK | |
Object getSource() (*在 java.util.EventObject *中) | 返回引发事件的对象。 |
使用动作侦听器的示例
下表列出了许多使用动作侦听器的示例。
Example | Where Described | Notes |
---|---|---|
Beeper | 本部分和事件侦听器简介 | 包含一个带有一个动作侦听器的按钮,当您单击该按钮时会发出蜂鸣声。 |
MultiListener | 事件侦听器简介 | 在一个按钮上注册两个不同的动作侦听器。还在两个不同的按钮上注册相同的动作侦听器。 |
RadioButtonDemo | 如何使用单选按钮 | 在五个单选按钮上注册相同的动作侦听器。侦听器使用getActionCommand 方法确定哪个单选按钮触发了该事件。 |
MenuDemo | 如何使用菜单 | 显示如何侦听菜单项上的动作事件。 |
TextDemo | 如何使用 Literals 栏位 | 在文本字段上注册动作侦听器的 Servlets。 |
IconDemo | 如何使用图标 | 将图像加载到动作侦听器中。由于加载图像可能需要一段时间,因此该程序使用SwingWorker 在后台线程中加载图像。 |
TableDialogEditDemo | 如何使用表格 | 通过工厂方法在颜色 selectors 对话框的“确定”按钮上注册动作侦听器。 |
SliderDemo | 如何使用滑块 | 在控制动画循环的计时器上注册动作侦听器。 |