您需要什么:
1.触发事件的组件
2.自定义事件类
3.监听器界面
4.和一个监听器实现
从1开始的组件需要具有事件侦听器列表,以及方法:addListener; removeListener;和dispatchEvent. dispatchEvent方法将遍历事件侦听器列表并执行一些方法(请参见4:侦听器实现).该方法具有一个事件对象作为参数(请参见2:自定义事件类).
1的基本代码:
protected List 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();
}
listeners.add(listener);
}
public synchronized void removeListener(MyListener listener) {
if (listeners == null) {
listeners = new ArrayList();
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无关.