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. 前端之CSS语法及选择器

    一.css语法: css由两大部分组成:选择符和声明,声明由属性和属性值两部分组成; 选择符{属性:属性值;属性:属性值;} 注: a) 属性和属性值之间用冒号连接: b)每条声明结束要加分号: 二. ...

  2. AJPFX浅谈Java 性能优化之垃圾回收(GC)

    ★JVM 的内存空间 在 Java 虚拟机规范中,提及了如下几种类型的内存空间: ◇栈内存(Stack):每个线程私有的.◇堆内存(Heap):所有线程公用的.◇方法区(Method Area):有点 ...

  3. 让WPS10显示为offic97效果

    让WPS10显示为offic97效果2019/1/26 22:02 OS:win7 64位使用的WPS_10.1.0.5603_setup.1460689247.exe 衣不如旧,人不如新.最开始接触 ...

  4. String 截取字符串#中间的文本

    通过正则实现: String regex = "#([^#]+)#"; @Test public void test() { String text = "#中俄建交七十 ...

  5. js数组引用

    总结归纳: 1.普通的赋值是复制栈区内容. 2.基本类型的数据在栈区存放数据自身,var a=b; //a与b无关. 引用类型数据在栈区存放数据地址.  var a=b; //a,b联动 3.基本数据 ...

  6. Javaweb学习笔记6—EL表达式与JSTL及自定义标签

    今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps: ...

  7. File.Exists 文件不存在 Or FileNotFoundException

    标题警告,本文仅限走投无路,最终可能的一个问题导致. 最开始出现在找不到文件,测试发现: 看起来毫无毛病 而后各种测试: 注意看,第一行跟第三行一模一样 发现[@"‪‪‪]这两个字符有毒,如 ...

  8. prevent to do sth 与 prevent sb (from) doing 用法

    prevent to do sth 如: Do not water in before making a turn every time 9 days, make wilting of its bra ...

  9. 手写MVVM框架 之vue双向数据绑定原理剖析

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Database coalesce

    coalesce 语法 注意:连接操作符“||”是一个值得注意的例外. 例如,空值加任何值都是空值,空值 乘任何值也都是空值,依此类推. 参数 expression 任何类型的表达式. n 表示可以指 ...