• 技术文章 >Java >java教程

    自定义监听事件的代码示例

    Y2JY2J2017-05-06 12:52:32原创753
    这篇文章主要介绍了JAVA用户自定义事件监听实例代码的相关资料,需要的朋友可以参考下

    JAVA用户自定义事件监听实例代码

    很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下:

    package demo;
    import Java.util.EventObject;
    /**
    * Title: 事件处理类,继承了事件基类
    * Description: 
    * Copyright: Copyright (c) 2005
    * Company: cuijiang
    * @author not attributable
    * @version 1.0
    */
    public class DemoEvent extends EventObject
    {
      private Object obj;
      private String sName;
      public DemoEvent(Object source,String sName)  {
       super(source);
       obj = source;
       this.sName=sName;
      }
      public Object getSource()
      {
       return obj;
      }
      public void say()
      {
       System.out.println("这个是 say 方法...");
      }
      public String getName()
      {
       return sName;
      }
    }
    package demo;
    import java.util.EventListener;
    /**
    * Title: 监听器接口
    * Description: 
    * Copyright: Copyright (c) 2005
    * Company: cuijiang
    * @author not attributable
    * @version 1.0
    */
    public interface DemoListener extends EventListener{
      public void demoEvent(DemoEvent dm);
    }
    package demo;
    import java.util.*;
    /**
    * Title: 使用事件的类
    * Description: 该类实现了监听器的添加和监听器方法的执行,并且实现了由于属性的改变而执行事件
    * Description: 在添加、删除、执行监听器的时候都要注意同步问题
    * Copyright: Copyright (c) 2005
    * Company: cuijiang
    * @author not attributable
    * @version 1.0
    */
    public class DemoSource{
      private Vector repository = new Vector();
      private DemoListener dl;
      private String sName="";
      public DemoSource()
      {
      }
      //注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
      public void addDemoListener(DemoListener dl)
      {
       repository.addElement(dl);//这步要注意同步问题
      }
      //如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
      public void notifyDemoEvent(DemoEvent event) {
       Enumeration enum = repository.elements();//这步要注意同步问题
       while(enum.hasMoreElements())
       {
        dl = (DemoListener)enum.nextElement();
        dl.demoEvent(event);
       }
      }
      //删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
      public void removeDemoListener(DemoListener dl)
      {
       repository.remove(dl);//这步要注意同步问题
      }
      /**
      * 设置属性
      * @param str1 String
      */
      public void setName(String str1)
      {
       boolean bool=false;
       if(str1==null && sName!=null) bool=true;
       else if(str1!=null && sName==null) bool=true;
       else if(!sName.equals(str1)) bool=true;
       this.sName=str1;
       //如果改变则执行事件
       if(bool) notifyDemoEvent(new DemoEvent(this,sName));
      }
      public String getName()
      {
       return sName;
      }
    }
    package demo;
    import java.lang.Thread;
    /**
    * Title: 测试类
    * Description: 测试了由于改变属性而引起的事件发生
    * Copyright: Copyright (c) 2005
    * Company: cuijiang
    * @author not attributable
    * @version 1.0
    */
    public class TestDemo
       implements DemoListener {
      private DemoSource ds;
      public TestDemo()
      {
       ds=new DemoSource();
       ds.addDemoListener(this);
       System.out.println("添加监听器完毕");
       try {
        Thread.sleep(3000);
        //改变属性,触发事件
        ds.setName("改变属性,触发事件");
       }
       catch (InterruptedException ex) {
        ex.printStackTrace();
       }
       ds.addDemoListener(this);
       System.out.println("添加监听器完毕2");
       try {
        Thread.sleep(3000);
        //改变属性,触发事件
        ds.setName("改变属性,触发事件2");
       }
       catch (InterruptedException ex) {
        ex.printStackTrace();
       }
       ds.removeDemoListener(this);
       System.out.println("添加监听器完毕3");
       try {
        Thread.sleep(3000);
        //改变属性,触发事件
        ds.setName("改变属性,触发事件3");
       }
       catch (InterruptedException ex) {
        ex.printStackTrace();
       }
    
      }
      public static void main(String args[])
      {
       new TestDemo();
      }
      /**
      * demoEvent
      *
      * @param dm DemoEvent
      * @todo Implement this test.DemoListener method
      */
      public void demoEvent(DemoEvent dm) {
       System.out.println("事件处理方法");
       System.out.println(dm.getName());
       dm.say();
      }
    }

    【相关推荐】

    1. Java免费视频教程

    2. 阿里巴巴Java开发手册

    3. 全面解析Java注解

    以上就是自定义监听事件的代码示例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:JAVA,监听事件
    上一篇:实例详解Queue在Java中应用 下一篇:java关于邮件发送的代码示例
    Web大前端开发直播班

    相关文章推荐

    • JAVA详细解析之IO流、File、字节流以及字符流• 完全掌握Java单例模式• 图文详解!java中锁的整理总结• JAVA学习IO操作之字节流和字符流(总结分享)• JAVA面向对象之继承、构造方法、重写和重载(总结分享)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网