首页 > 编程 > Java > 正文

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

2019-11-26 12:34:00
字体:
来源:转载
供稿:网友

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();  }}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表