java自定义监听器的示例代码
2015-09-29 10:54
567 查看
JAVA用户自定义事件监听完整例子
JAVA用户自定义事件监听完整例子- —sunfruit 很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下:
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统