java 监听实现办法

来源:互联网 发布:3d打印技术编程教程 编辑:程序博客网 时间:2024/05/17 17:39

监听实现办法

代码块

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();   }}
0 0
原创粉丝点击