我一直在使用 AS3 中的事件侦听器,但在 java 中似乎没有(图形组件除外)。令人惊讶。
问题是,我如何在 java 中实现自己的事件监听器?也许以前有人做过这样的工作?
您可以定义一个监听器接口:
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"));
}
}
您可以将PropertyChangeSupport与PropertyChangeListener一起使用或使用观察者模式。
首先,您需要一些事件源,因此您可以将侦听器附加到它。如果您需要自定义侦听器,那么您还需要实现自定义源。
在 Java 中,您可以找到现有的源代码和listener
接口。正如您提到的,GUI 通常基于事件。如果您喜欢 3D,那么渲染引擎会提供适当的 API(例如collision detection
)、文件系统挂钩、属性更改侦听器(Android
)。
这取决于您的需求。对于大多数用途,应该已经有一个库可以为您提供适当的 API。
在实现您自己的解决方案时,对于应用程序范围的事件处理,事件总线可能是一个不错的选择。我首选的实现是在 Guava 库中:http ://code.google.com/p/guava-libraries/wiki/EventBusExplained
您可以在 Java中为您想要观察的对象扩展Observable类实现一种侦听器,并在侦听器上实现Observer。
您不需要框架或 Observer 类。自 1995 年版本 1.0 以来,它全部内置于 Java Beans 规范中。它应该是 Java 对 VB 属性的回答。
这是一个教程:
http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html