zoukankan      html  css  js  c++  java
  • 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");
        }
    }
    
    原创:做时间的朋友
  • 相关阅读:
    npm install 错误 | gyp ERR! configure error
    AD中鼠标经过PCB走线或元器不能高亮显示连线的解决办法
    浏览器提示TLS版本过低, 要求升到TLS1.2或TLS1.3的一些问题收录
    Java.报错:The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
    Centos.安装Goaccess1.2
    Mongoose多数据库连接及实用样例
    mongodb通过profile来监控数据
    mongodb副本集 statestr状态说明/解释
    mongodb.副本集配置方法(使用keyfile认证部署)
    vsftp安装与配置for Linux
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/15194656.html
Copyright © 2011-2022 走看看