JAVA中的自定义事件
2012-11-27 15:14
162 查看
http://blog.csdn.net/archer_xy/article/details/7221864 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(); } }http://blog.sina.com.cn/s/blog_4ae536e401008g9b.html
自定义事件在java中很有用处,比如我们写一个短信接口程序,在发送短信后触发一个事件,接收短信的时候再触发另外一个时间。而这些事件都必须自己去实现。那么如何实现自定义的事件呢?首先我们必须了解EventObject和EventListener两个对象。EventObject类是所有事件都必须继承的。接口EventListener用来实现我们自己的监听器。
首先我们先定义自己的事件吧。
在这个类里面,我们继承了EventObject类,初始化了事件源,重写了获得事件源的方法。
然后我们需要定义自己的事件监听器。
这里定义的方法便是事件发生时调用的方法。需要重新实现。
接下来,我们需要定义一个事件源类。也就是相当于button之类的对象。
在这里需要注意的是,存储监听器的集合对象必须是线程安全的。
然后我们便可以写测试类来测试事件了。
执行之后,控制台打印"test_event"。ok!
相关文章推荐
- java 自定义监听事件
- 自定义事件格式--常用的 Java编写的各种时间格式类
- java 自定义监听事件
- java中通过接口实现自定义事件,动态设定行为
- 快速开发平台ES2007在UISCRIPT数据列表插入自定义按钮及按钮事件|JAVA开发平台|web开发平台
- 【转】JAVA用户自定义事件监听完整例子- ---sunfruit
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应 (Java版)
- java8函数式接口和Lambda表达式应用在javaFX中tableView自定义点击事件
- Java自定义事件
- java 实现自定义事件
- JAVA用户自定义事件监听完整例子
- Java的事件自定义事件学习
- Java微信二次开发之14-自定义菜单及菜单响应事件的推送
- java事件机制及自定义事件处理
- java微信二次第三方开发,token认证,消息事件接收,图文素材库,自定义菜单等功能
- 一个Java写的自定义的事件监听器例子
- JAVA用户自定义事件监听完整例子
- Java 自定义事件处理
- java 自定义监听事件