JAVA自定义事件监听完整例子---sunfruit[转]
/** *//**
* 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自定义事件监听完整例子---sunfruit[转]的更多相关文章
- [问题贴]mui.openWindow+自定义事件监听操作让alert()执行两次
仔细看,Alert函数执行了两次 共两个页面:index.html和detail.html, detail.html为按钮设置了自定义事件监听(newsId),触发alert. 在index.html ...
- Java Spring 自定义事件监听
ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; imp ...
- JAVA GUI 事件监听事件 详解 和 案例.
GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...
- Java GUI 事件监听
现在使用的仍是AWT的事件模型.涉及到3类对象: Event Source:事件源,即事件发生所在的组件 Event:事件,封装了此次事件的相关信息 Event Listener:事件监听器,监听事件 ...
- cocos2d-js 自定义事件监听派发
熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法. cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManag ...
- JAVA Swing 事件监听
EventListner 接口 它是一个标记接口,每一个监听器接口扩展.这个类定义在java.util包. 类声明 以下是声明java.util.EventListener接口: public int ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- Java界面编程—事件监听机制
组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...
- Java事件监听的四种实现方式
1.事件对象: 一般继承自java.util.EventObject对象,由开发者自行定义. 2.事件源: 就是触发事件的源头,不同的事件源会触发不同的事件类型. 3.事件监听器: 事件监听器负责监听 ...
随机推荐
- 运行Python脚本的方法
1.安装完Python后,添加环境变量---在系统变量中找到Path ,点击编辑把你的python安装目录放到里面,注意环境变量之间用";"隔开.打开CMD,在CMD命令行中,输入 ...
- A:石头剪刀布
总时间限制: 1000ms 内存限制: 65536kB描述石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.一天,小A和小B正好在玩石头剪刀布.已知他们的出拳 ...
- roscpp
不服气不行,写ROS这伙就是比我知道的库函数多 inti函数:初始化节点是简单读些命令行参数和环境配置来配置节点名呀,命名空间呀和命名重映射之类东西. 其是在roscpp里面解释很清楚了,只是,我当时 ...
- "编写高质量代码"一书笔记
总结 css架构结构 : base : 共用样式 common: 通用控件样式 page: 页面级样式 js 架构结构: base 位于三层最底层,职责一是封装不同浏 ...
- 算法课堂笔记14—NP-COMPLETENESS
今天的算法课接着上一节,说的是NP问题. 1.关于什么是P和NP问题 所谓P问题是指所有能在多项式复杂度解决的问题,比如排序算法,n*n复杂度解决问题.而对于有些问题,目前可能没有多项式复杂度的解决方 ...
- iOS开发拓展篇—音频处理(音乐播放器2)
iOS开发拓展篇—音频处理(音乐播放器2) 说明:该文主要介绍音乐播放界面的搭建. 一.跳转 1.跳转到音乐播放界面的方法选择 (1)使用模态跳转(又分为手动的和自动的) (2)使用xib并设置跳转 ...
- 必备技能:分清楚DOM的attribute和property
分清楚DOM的attribute和property,用JQ的时候分清楚attr,和prop方法,网上有很多大神的总结,我就不列举了.
- 【经典算法】——KMP,深入讲解next数组的求解
我们在一个母字符串中查找一个子字符串有很多方法.KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度. 当然我们可以看到这个算法针对的是子串有对称属性, ...
- adb push和pull使用
1.运行cmd> 进入adb.exe目录 2.>adb connect ip 3.>adb remount 4.>adb push 本地apk全路径 /system/app/ ...
- jQuery--checkbox全选
jQuery.attr 获取/设置对象的属性值,如: $("input[name='chk_list']").attr("checked"); //读 ...