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. leetcode315 Count of Smaller Numbers After Self

    思路: bit + 离散化. 实现: #include <bits/stdc++.h> using namespace std; class Solution { public: int ...

  2. ArcGIS Desktop新建postgresql版sde(10.4.1)的连接

    假设连接到的sde数据库是pg数据库,其他参数包括: ip:10.0.0.8 数据库:sde1 用户:sde 密码:sde 打开catalog,新建数据库连接 按如下输入数据库连接参数 红框1是数据库 ...

  3. Xilinx器件原语

    原语,其英文名为primitive,是FPGA厂商针对其器件特征开发的一系列常用模块的名称.原语是FPGA芯片中基本元件,代表FPGA中实际拥有的硬件逻辑单元,如LUT,D触发器,RAM等.相当于软件 ...

  4. FPGA内部RAM的初始化

    Altera的RAM初始化文件格式是mif和hex. QuartusII自带的RAM初始化工具很方便产生初始化文件. Xilinx的RAM初始化文件格式是coe, 在vivado中软件会将coe文件变 ...

  5. What is Scalability?

    Scalability is a system's ability to process more workload, with a proportional increase in system r ...

  6. DLL入门浅析【转】

     1.建立DLL动态库 动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的.所有的C语言标准库函数都存放在某一函数库中.在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数 ...

  7. 李开复:AlphaGo 若打败了世界冠军,意味着什么?

    创新工场董事长李开复在知乎就AlphaGo与李世石的人机大战发表了自己看法,他认为四个月前的AlphaGo击败李世石基本不可能,不过这四个月AlphaGo进步很多,比赛应该很精彩.但是,无论这次结果如 ...

  8. [Python學習筆記] 在Centos上安裝 Django

    曾在模擬器跟Digital Ocean上安裝成功,我在 Digital Ocean上的是CentOS 7 x64,模擬器的則是Centos 6.雖然Centos 本身已經裝好 Python 但是是2. ...

  9. mysql登录(linux)

    一.修改配置文件 查询路径 find / -name my.cnf 修改文件 vi my.cnf [mysqld]下面加上skip-grant-tables 二.登录数据库 重启mysql servi ...

  10. jxcel - 好用的Excel与Java对象转换工具

    更多精彩博文,欢迎访问我的个人博客 Jxcel简介 Jxcel是一个支持Java对象与Excel(目前仅xlsx.xls)互相转换的工具包. 项目地址:https://github.com/jptan ...