JAVA中的自定义事件
来源:互联网 发布:docker的网络模式 编辑:程序博客网 时间:2024/06/04 18:04
http://blog.csdn.net/archer_xy/article/details/7221864package 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(); }}
http://blog.sina.com.cn/s/blog_4ae536e401008g9b.html
自定义事件在java中很有用处,比如我们写一个短信接口程序,在发送短信后触发一个事件,接收短信的时候再触发另外一个时间。而这些事件都必须自己去实现。那么如何实现自定义的事件呢?首先我们必须了解EventObject和EventListener两个对象。EventObject类是所有事件都必须继承的。接口EventListener用来实现我们自己的监听器。
- JAVA中的自定义事件
- Flex4中的自定义事件
- AS3中的自定义事件
- 自定义View中的事件
- Spring中的自定义事件
- Java、LotusScript和JavaScript中的自定义事件编程
- Java、LotusScript和JavaScript中的自定义事件编程
- Java、LotusScript和JavaScript中的自定义事件编程 .
- Java事件机制---自定义事件
- Java事件机制---自定义事件
- 自定义事件(java)
- Java自定义事件
- java 自定义监听事件
- java 自定义事件处理
- Java 自定义事件处理
- java 自定义监听事件
- 自定义java事件监听
- Java 自定义事件
- 【转】从疯狂痴迷数据库存储过程到彻底放弃他
- SqlHelper介绍
- 桌面图标全变成.lnk的图标(WIN7系统电脑除了计算机,网络,回收站以外(包括开始菜单)的图标全都变成后缀为.lnk的文件)
- struts2中常用Result类型的用法
- 基于jquery的浮动客服QQ代码
- JAVA中的自定义事件
- OpenGL织梦之旅【第二章】第3节.指定颜色以及定义视口
- About Shell
- POJ Y2K Accounting Bug
- python urllib2模块技术参考
- java 中配置和读取properties文件
- ireport 中文乱码
- 25个必须记住的SSH命令
- Verilog HDL Behavioral Modeling Part-V