您需要什么:
1. 触发事件的组件
2.自定义事件类
3. 监听器接口
4. 以及监听器的实现
1 中的组件需要有一个事件监听器列表,以及以下方法:addListener
; removeListener
; and dispatchEvent
. The dispatchEvent
-method 将遍历事件侦听器列表并执行某些方法(请参阅 4:侦听器实现)。该方法以事件对象作为参数(参见 2:自定义事件类)。
1 的基本代码:
protected List<MyListener> listeners;
protected synchronized void dispatchEvent(MyEvent event) {
if (listeners != null) {
for (MyListener listener : listeners) {
listener.myMethod(event);
}
}
}
public synchronized void addListener(MyListener listener) {
if (listeners == null) {
listeners = new ArrayList<MenuListener>();
}
listeners.add(listener);
}
public synchronized void removeListener(MyListener listener) {
if (listeners == null) {
listeners = new ArrayList<MyListener>();
return;
}
listeners.remove(listener);
}
2 的基本代码:
public class MyEvent {
protected String eventType;
public MyEvent(String eventType) {
this.eventType = eventType;
}
//getters and setters
}
3 的基本部分:
public interface MyListener {
public void doSomething(MyEvent event);
}
4 的代码(监听器实现)
public class MyImplementation implements MyListener {
@Override
public void doSomething(myEvent event) {
//do something concretes here
}
}
代码流程如何工作:
经过一些交互后,调度程序类将向每个事件侦听器“宣布”发生了某些事情。
dispatchEvent(new MyEvent("ADD_USER"));
在想要接收事件的类中,您需要实例化调度程序类和侦听器实现类,并将侦听器添加到调度程序的列表中:
MyDispatcher disp = new MyDispatcher();
MyImplementation myImpl = new MyImplementation();
// Then add the event-listener to the dispatcher:
disp.addListener(myImpl);
当然,其中一些类可以是内部类,并且可以简化或扩展代码,但这是总体思路。这也只是普通的 Java,与 Vaadin 无关。