zoukankan      html  css  js  c++  java
  • Java 事件机制

    java事件机制包括三个部分:事件、事件监听器、事件源。

    1、事件。一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中.

    com.javaedu.event.CusEvent类

    package com.javaedu.event;

    import java.util.EventObject;

    /**
     * 事件类,用于封装事件源及一些与事件相关的参数.
     * @author Eric
     */
    public class CusEvent extends EventObject {
        private static final long serialVersionUID = 1L;
        private Object source;//事件源
        
        public CusEvent(Object source){
            super(source);
            this.source = source;
        }

        public Object getSource() {
            return source;
        }

        public void setSource(Object source) {
            this.source = source;
        }
    }

    2、事件监听器。实现java.util.EventListener接口,注册在事件源上,当事件源的属性或状态改变时,取得相应的监听器调用其内部的回调方法。对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。 实现了事件监听者接口中一些或全部方法的类就是事件监听者。

    public interface EventListener:所有事件侦听器接口必须扩展的标记接口:com.javaedu.event.CusEventListener类

    package com.javaedu.event;

    import java.util.EventListener;

    /**
     * 事件监听器,实现java.util.EventListener接口。定义回调方法,将你想要做的事
     * 放到这个方法下,因为事件源发生相应的事件时会调用这个方法。
     * @author Eric
     */
    public class CusEventListener implements EventListener {
        
        //事件发生后的回调方法
        public void fireCusEvent(CusEvent e){
            EventSourceObjecteObject = (EventSourceObject)e.getSource();
            System.out.println("My name has been changed!");
         System.out.println("I got a new name,named ""+eObject.getName()+""");    }
    }

    3、事件源。事件发生的地方,由于事件源的某项属性或状态发生了改变(比如BUTTON被单击、TEXTBOX的值发生改变等等)导致某项事件发生。换句话说就是生成了相应的事件对象。因为事件监听器要注册在事件源上,所以事件源类中应该要有盛装监听器的容器(List,Set等等)。

     com.javaedu.event.EventSourceObject类

    package com.javaedu.event;

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;

    /**
     * 事件源.
     * @author Eric
     */
    public class EventSourceObject {
        private String name;
        //监听器容器
        private Set<CusEventListener> listener;
        public EventSourceObject(){
            this.listener = new HashSet<CusEventListener>();
            this.name = "defaultname";
        }
        //给事件源注册监听器
        public void addCusListener(CusEventListener cel){
            this.listener.add(cel);
        }
        //当事件发生时,通知注册在该事件源上的所有监听器做出相应的反应(调用回调方法)
        protected void notifies(){
            CusEventListener cel = null;
            Iterator<CusEventListener> iterator = this.listener.iterator();
            while(iterator.hasNext()){
                cel = iterator.next();
                cel.fireCusEvent(new CusEvent(this));
            }
        }
        public String getName() {
            return name;
        }
        //模拟事件触发器,当成员变量name的值发生变化时,触发事件。
        public void setName(String name) {
            if(!this.name.equals(name)){
                this.name = name;
                notifies();
            }      
        }
    }

    下面是主方法类

     com.javaedu.event.MainTest类、

    package com.javaedu.event;

    public class MainTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
            EventSourceObject object = new EventSourceObject();
            //注册监听器
            object.addCusListener(new CusEventListener(){
                @Override
                public void fireCusEvent(CusEvent e) {
                    super.fireCusEvent(e);
                }
            });
            //触发事件
            object.setName("eric");
        }
    }

  • 相关阅读:
    对MVC模型的自悟,详尽解释,为了更多非计算机人员可以理解
    openSUSE leap 42.3 实现有线 无线同时用
    Fedora27 源配置
    Ubuntu16.04添加HP Laserjet Pro M128fn打印机和驱动
    openSUSE leap 42.3 添加HP Laserjet Pro M128fn打印机和驱动
    OpenSUSE Leap 42.3下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    OpenSUSE Leap 42.3 安装java(Oracle jre)
    linux下支持托盘的邮件客户端Sylpheed
    Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    Firefox 浏览器添加Linux jre插件
  • 原文地址:https://www.cnblogs.com/cold-ice/p/6039026.html
Copyright © 2011-2022 走看看