JAVA用户自定义事件监听实例代码
JAVA用户自定义事件监听实例代码
很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下:
packagedemo; importJava.util.EventObject; /** *Title:事件处理类,继承了事件基类 *Description: *Copyright:Copyright(c)2005 *Company:cuijiang *@authornotattributable *@version1.0 */ publicclassDemoEventextendsEventObject { privateObjectobj; privateStringsName; publicDemoEvent(Objectsource,StringsName){ super(source); obj=source; this.sName=sName; } publicObjectgetSource() { returnobj; } publicvoidsay() { System.out.println("这个是say方法..."); } publicStringgetName() { returnsName; } }
packagedemo; importjava.util.EventListener; /** *Title:监听器接口 *Description: *Copyright:Copyright(c)2005 *Company:cuijiang *@authornotattributable *@version1.0 */ publicinterfaceDemoListenerextendsEventListener{ publicvoiddemoEvent(DemoEventdm); }
packagedemo; importjava.util.*; /** *Title:使用事件的类 *Description:该类实现了监听器的添加和监听器方法的执行,并且实现了由于属性的改变而执行事件 *Description:在添加、删除、执行监听器的时候都要注意同步问题 *Copyright:Copyright(c)2005 *Company:cuijiang *@authornotattributable *@version1.0 */ publicclassDemoSource{ privateVectorrepository=newVector(); privateDemoListenerdl; privateStringsName=""; publicDemoSource() { } //注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题 publicvoidaddDemoListener(DemoListenerdl) { repository.addElement(dl);//这步要注意同步问题 } //如果这里没有使用Vector而是使用ArrayList那么要注意同步问题 publicvoidnotifyDemoEvent(DemoEventevent){ Enumerationenum=repository.elements();//这步要注意同步问题 while(enum.hasMoreElements()) { dl=(DemoListener)enum.nextElement(); dl.demoEvent(event); } } //删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题 publicvoidremoveDemoListener(DemoListenerdl) { repository.remove(dl);//这步要注意同步问题 } /** *设置属性 *@paramstr1String */ publicvoidsetName(Stringstr1) { booleanbool=false; if(str1==null&&sName!=null)bool=true; elseif(str1!=null&&sName==null)bool=true; elseif(!sName.equals(str1))bool=true; this.sName=str1; //如果改变则执行事件 if(bool)notifyDemoEvent(newDemoEvent(this,sName)); } publicStringgetName() { returnsName; } }
packagedemo; importjava.lang.Thread; /** *Title:测试类 *Description:测试了由于改变属性而引起的事件发生 *Copyright:Copyright(c)2005 *Company:cuijiang *@authornotattributable *@version1.0 */ publicclassTestDemo implementsDemoListener{ privateDemoSourceds; publicTestDemo() { ds=newDemoSource(); ds.addDemoListener(this); System.out.println("添加监听器完毕"); try{ Thread.sleep(3000); //改变属性,触发事件 ds.setName("改变属性,触发事件"); } catch(InterruptedExceptionex){ ex.printStackTrace(); } ds.addDemoListener(this); System.out.println("添加监听器完毕2"); try{ Thread.sleep(3000); //改变属性,触发事件 ds.setName("改变属性,触发事件2"); } catch(InterruptedExceptionex){ ex.printStackTrace(); } ds.removeDemoListener(this); System.out.println("添加监听器完毕3"); try{ Thread.sleep(3000); //改变属性,触发事件 ds.setName("改变属性,触发事件3"); } catch(InterruptedExceptionex){ ex.printStackTrace(); } } publicstaticvoidmain(Stringargs[]) { newTestDemo(); } /** *demoEvent * *@paramdmDemoEvent *@todoImplementthistest.DemoListenermethod */ publicvoiddemoEvent(DemoEventdm){ System.out.println("事件处理方法"); System.out.println(dm.getName()); dm.say(); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!