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