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");
}
}
原创:做时间的朋友
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示