java事件
JAVA事件机制
事件机制包含3个部分:事件,监听器,事件源
1.事件
继承java.util.EventObject类,封装了事件源对象及跟踪事件相关信息
自定义事件类CustomEvent
import java.util.EventObject;
public class CustomEvent extends EventObject {
/**
* Constructs a prototypical Event.
*
* @param source The object on which the Event initially occurred.
* @throws IllegalArgumentException if source is null.
*/
public CustomEvent(Object source) {
super(source);
}
}
2.事件监听器
实现java.util.EventListener接口,
核心是:事件监听器要注册到事件源(事件对象里内嵌的object)上,当事件源属性或者状态修改,
遍历监听器并调用监听器其内部回调方法。
自定义事件监听器
CustomEventListener
import java.util.EventListener;
// 事件监听器,定义回调方法,将要做的事放到这个方法下,事件源发生相应的事件会调用这个方法
public class CustomEventListener implements EventListener {
// 处理事件的方法
public void fireEvent(CustomEvent event){
Object obj = event.getSource();
System.out.println("deal event : " + obj.toString());
}
}
3.事件源
最核心的地方,事件发生的地方
由于事件源的某个属性发生了改变,生成了相应的时间对象,
事件监听器一定要注册到事件源上,事件源中要有装监听器的容器
EventSourceObject
public class EventSourceObject {
private String name;
// 监听器容器
private Set<CustomEventListener> listeners;
public EventSourceObject() {
this.listeners = Sets.newHashSet();
this.name = "defaultName";
}
// 给时间源注册监听器
public void addCustomListener(CustomEventListener listener){
this.listeners.add(listener);
}
// 当事件发生时,通知注册在该事件源上的所有监听器做出相应反应
protected void noties(){
this.listeners.parallelStream().forEach(listener -> {
listener.fireEvent(new CustomEvent(this));
});
}
public String getName(){
return name;
}
public void setName(String name){
if (!this.name.equalsIgnoreCase(name)){
this.name = name;
noties();
}
}
}
4.主方法
public class MainTest {
public static void main(String[] args) {
EventSourceObject eventSourceObject = new EventSourceObject();
eventSourceObject.addCustomListener(new CustomEventListener());
eventSourceObject.setName("3");
}
}
原创:做时间的朋友