事件侦听器简介

如果您已经阅读了任何组件操作指南页面,那么您可能已经知道事件侦听器的基础知识。

让我们看一下最简单的事件处理示例之一。它称为“蜂鸣器”,它具有一个单击按钮时会发出蜂鸣声的按钮。

单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 Beeper。另外,要自己编译和运行示例,请查阅example index

单击我蜂鸣器按钮

您可以在Beeper.java中找到整个程序。以下是实现按钮事件处理的代码:

public class Beeper ... implements ActionListener {
    ...
    //where initialization occurs:
        button.addActionListener(this);
    ...
    public void actionPerformed(ActionEvent e) {
        ...//Make a beep sound...
    }
}

Beeper类实现ActionListenerinterface,该interface包含一个方法:actionPerformed。由于Beeper实现ActionListener,因此Beeper对象可以注册为按钮触发的动作事件的侦听器。使用Button addActionListener方法注册了Beeper后,每次单击按钮都会调用BeeperactionPerformed方法。

更复杂的示例

您在前面的示例中最简单地看到了事件模型,该模型非常强大且灵活。任意数量的事件侦听器对象都可以侦听任意数量的事件源对象中的各种事件。例如,一个程序可能为每个事件源创建一个侦听器。或者,一个程序可能具有来自所有来源的所有事件的单个侦听器。一个程序甚至可以从一个事件源中为单个事件提供多个侦听器。

具有多个侦听器的事件源

多个侦听器可以注册以从特定来源通知特定类型的事件。同样,同一侦听器可以侦听来自不同对象的通知。

每个事件由一个对象表示,该对象提供有关事件的信息并标识事件源。事件源通常是组件或模型,但其他类型的对象也可以是事件源。

每当您要检测来自特定组件的事件时,请首先检查该组件的操作方法部分。组件方法部分的列表为here。操作方法部分提供了处理您最可能关心的事件的示例。例如,在如何使用颜色 selectors中,您将找到一个编写更改侦听器以跟踪颜色 selectors 中颜色何时更改的示例。

下面的示例演示事件侦听器可以在多个对象上注册,并且同一事件可以发送到多个侦听器。该示例包含两个事件源(JButton个实例)和两个事件侦听器。事件侦听器之一(称为MultiListener的类的实例)从两个按钮侦听事件。收到事件时,它将事件的“操作命令”(设置为按钮标签上的文本)添加到顶部文本区域。第二个事件侦听器(名为Eavesdropper的类的实例)仅在一个按钮上侦听事件。收到事件时,它将操作命令添加到底部文本区域。

MultiListener 和窃听器对按钮的响应

Try this:

  • 单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 MultiListener。另外,要自己编译和运行示例,请查阅example index

  • 点击* Blah blah blah *按钮。只有MultiListener对象被注册才能收听此按钮。

  • 单击“您不说!”按钮。 MultiListener对象和Eavesdropper对象都被注册以收听此按钮。

您可以在MultiListener.java中找到整个程序。以下是实现按钮事件处理的代码:

public class MultiListener ... implements ActionListener {
    ...
    //where initialization occurs:
        button1.addActionListener(this);
        button2.addActionListener(this);

        button2.addActionListener(new Eavesdropper(bottomTextArea));
    }

    public void actionPerformed(ActionEvent e) {
        topTextArea.append(e.getActionCommand() + newline);
    }
}

class Eavesdropper implements ActionListener {
    ...
    public void actionPerformed(ActionEvent e) {
        myTextArea.append(e.getActionCommand() + newline);
    }
}

在上面的代码中,MultiListenerEavesdropper都实现ActionListenerinterface,并使用JButton addActionListener方法注册为动作侦听器。这两个类对actionPerformed方法的实现都是相似的:它们只是将事件的 action 命令添加到文本区域。