9

我一直在使用 AS3 中的事件侦听器,但在 java 中似乎没有(图形组件除外)。令人惊讶。

问题是,我如何在 java 中实现自己的事件监听器?也许以前有人做过这样的工作?

4

5 回答 5

14

您可以定义一个监听器接口:

public interface EventListener {
    void fireEvent (Event e);
}

然后在您的代码中:

EventListener lst = new EventListener() {
    @Override
    public void fireEvent (Event e) {
        //do what you want with e
    }
}

someObject.setListener(lst);
someObject.somethingHappened();

然后在 someObject 中(实际上你可能会持有一个听众列表):

public class SomeObject {
    private EventListener lst;

    public void setListener (EventListener lst) {
        this.lst = lst;
    }

    public void somethingHappened () {
        lst.fireEvent(new Event("Something Happened"));
    }
}
于 2012-12-21T13:11:58.110 回答
4

您可以将PropertyChangeSupportPropertyChangeListener一起使用或使用观察者模式。

于 2012-12-21T13:17:25.957 回答
3

首先,您需要一些事件源,因此您可以将侦听器附加到它。如果您需要自定义侦听器,那么您还需要实现自定义源。

在 Java 中,您可以找到现有的源代码和listener接口。正如您提到的,GUI 通常基于事件。如果您喜欢 3D,那么渲染引擎会提供适当的 API(例如collision detection)、文件系统挂钩、属性更改侦听器(Android)。

这取决于您的需求。对于大多数用途,应该已经有一个库可以为您提供适当的 API。

在实现您自己的解决方案时,对于应用程序范围的事件处理,事件总线可能是一个不错的选择。我首选的实现是在 Guava 库中:http ://code.google.com/p/guava-libraries/wiki/EventBusExplained

于 2012-12-21T13:13:07.747 回答
2

您可以在 Java中为您想要观察的对象扩展Observable类实现一种侦听器,并在侦听器上实现Observer

于 2012-12-21T13:13:47.083 回答
1

您不需要框架或 Observer 类。自 1995 年版本 1.0 以来,它全部内置于 Java Beans 规范中。它应该是 Java 对 VB 属性的回答。

这是一个教程:

http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

于 2012-12-21T13:15:37.870 回答