您需要什么:
1. 触发事件的组件
2.自定义事件类
3.监听接口
4. 和一个监听器实现
来自 1 的组件需要有一个事件监听器列表,方法是:addListener; removeListener;和dispatchEvent。 dispatchEvent-方法将遍历事件监听器列表并执行一些方法(参见 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"));
在你想接收事件的类中你需要实例化dispatcher类和listener实现类,并将listener添加到dispatcher的列表中:
MyDispatcher disp = new MyDispatcher();
MyImplementation myImpl = new MyImplementation();
// Then add the event-listener to the dispatcher:
disp.addListener(myImpl);
当然,其中一些类可以是内部类,代码可以简化或扩展,但这是大体思路。这也是纯 Java,没有任何 Vaadin 依赖。