Java中的事件监听器

时间:2012-12-21 13:08:26

标签: java listener

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

问题是,我怎样才能在java中实现自己的事件监听器?也许有人之前做过这项工作?

5 个答案:

答案 0 :(得分:13)

您可以定义一个Listener接口:

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"));
    }
}

答案 1 :(得分:4)

您可以PropertyChangeSupport使用PropertyChangeListener或使用观察者模式。

答案 2 :(得分:3)

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

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

这是一个教程:

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