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(); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!