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自定义监听器的示例代码的更多相关文章

  1. Java Socket长连接示例代码

    SocketListenerPusher.java代码如下: import java.io.IOException; import java.net.InetSocketAddress; import ...

  2. WPF自定义RoutedEvent事件示例代码

    ************************* 引用网友,便于查找所用..... 创建自定义路由事件和应用分为6个步骤: (1)自定义路由事件参数对象 (2)声明并注册路由事件 (3)为路由事件添 ...

  3. java 窗口的一些示例代码,可直接运行

    代码链接如下: http://pan.baidu.com/s/1gdlCI4N 有应用SWING,也有应用AWT,可视情况而定. 窗口程序运行需要jdk1.7环境(测试可用).

  4. SkylineGlobe 6.6 三维地图上实现自定义右键菜单示例代码

    1.OnRButtonDown.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  5. java poi操作excel示例代码

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...

  6. 左右JAVA示例代码事件分发和监督机制来实现-绝对原创有用

    文章标题:左右JAVA示例代码事件分发和监督机制来实现 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy201 ...

  7. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  8. 正则表达式学习笔记(附:Java版示例代码)

    具体学习推荐:正则表达式30分钟入门教程 .         除换行符以外的任意字符\w      word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s        space,空白符 ...

  9. java 添加一个线程、创建响应的用户界面 。 演示示例代码

    javajava 添加一个线程.创建响应的用户界面 . 演示示例代码 来自thinking in java 4 21章  部分的代码  夹21.2.11 thinking in java 4免费下载: ...

随机推荐

  1. 十个非常棒的学习angularjs的英文网站

    AngularJS 是非常棒的JS框架,能够创建功能强大,动态功能的Web app.AngularJS自2009发布以来,已经广泛应用于Web 开发中.但是对想要学习Angular JS 的人而言,只 ...

  2. 基于坐标的自动化测试神器---Total Control快速入门

    1.Total Control简单介绍 一款能够在PC上控制手机的软件,同时可以使用PC 触摸屏.鼠标.键盘, 全面操控 Android 手机,只需通过 USB 或 WiFi 连接手机至电脑,即可随时 ...

  3. 【ADO.NET】 使用通用数据库操作类Database (SQL Server)

    一.Web.config配置 <connectionStrings> <add name="constr_name" connectionString=" ...

  4. 盘点那些年,被Oracle收购的公司

    微博上看到一图,很清晰.盘点那些年,被Oracle收购的公司,Oracle日益强大,都收购了哪些公司呢?别再以为只有Sun啦...看看你都知道哪些? ps:Strategic Acquisitions ...

  5. tween.js下面的轮播(饿了么点餐的那种效果)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. 解决WampServer窗口界面乱码问题

    软件版本:WampServer 3.1.4 问题描述:Wamp安装完成.点击图标,发现导航界面乱码,也可能使用中没遇到这种问题.如下: 用记事本打开 wampmanager.ini 和 wampman ...

  7. JavaEE-07 过滤器和监听器

    学习要点 过滤器 监听器 过滤器Filter 过滤器的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响 ...

  8. 失误1: 把i放到循环体内部,i++失效

    54             while($lines_num_of_whole_table>=1){ 55                 my $i = 1;                 ...

  9. OpenCV2:第二章 创建图像并显示

    一.简介 相当于在PS中,新建一个画布 二.CvMat类/LPLImage和CvMat结构体 参考: OpenCV2:第一章 图像表示 三.create() Mat m(2,2,CV_8UC3); m ...

  10. 连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法

    MySQL新版默认使用caching_sha2_password作为身份验证插件,而旧版是使用mysql_native_password.当连接MySQL时报错“plugin caching_sha2 ...