我一直在使用AS3中的事件监听器,但似乎在java中没有(除了图形组件)。这很令人惊讶。
问题是,我怎样才能在java中实现自己的事件监听器?也许有人之前做过这项工作?
答案 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