当前位置: 移动技术网 > IT编程>开发语言>Java > JAVA用户自定义事件监听实例代码

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网