欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-01 12:28:58
java用户自定义事件监听实例代码 很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下: p...

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

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