Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Java自定义监听器的示例代码

Java用户自定义事件监听完整例子- ---sunfruit,很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下: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();
}
}相关阅读:JAVA 插入排序(直接插入) http://www.linuxidc.com/Linux/2011-11/47021.htm排序算法(JAVA实现):冒泡排序法和插入排序法 http://www.linuxidc.com/Linux/2012-02/54916.htmJava实现直接插入排序 http://www.linuxidc.com/Linux/2012-08/67391.htmJava实现选择排序 http://www.linuxidc.com/Linux/2012-02/55383.htm排序算法(Java实现):选择排序法和快速排序法 http://www.linuxidc.com/Linux/2012-02/54917.htmJAVA 选择排序 http://www.linuxidc.com/Linux/2011-11/47022.htm