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");
    }
}
原创:做时间的朋友
原文地址:https://www.cnblogs.com/PythonOrg/p/15194656.html