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");
        }
    }
    
    原创:做时间的朋友
  • 相关阅读:
    first
    JavaEE(3)
    简明Python3教程 7.运算符和表达式
    简明Python3教程 6.基础
    简明Python3教程 5.第一步
    高级程序员和低级程序员的区别
    JavaEE(2)
    Java数据结构与算法(33)
    Java数据结构与算法(32)
    Java数据结构与算法(31)
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/15194656.html
Copyright © 2011-2022 走看看