JAVA用户自定义事件监听实例代码

很多介绍用户自定义事件都没有例子,或是例子不全,下面写了一个完整的例子,并写入了注释以便参考,完整的实例源代码如下:
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用户自定义事件监听
# JAVA用户自定义事件监听实例详解
# Java Spring 事件监听详情解析
# Java基础学习之Swing事件监听
# java中接口和事件监听器的深入理解
# Java使用自定义注解实现为事件源绑定事件监听器操作示例
# Java事件监听机制讲解
# 详谈Java中的事件监听机制
# JavaGUI事件监听机制超详细讲解
# 要注意
# 这步
# 自定义
# 实现了
# 都要
# 希望能
# 写了
# 谢谢大家
# 不全
# 源代码
# 继承了
# String
# sName
# private
# public
# extends
# DemoEvent
# obj
# Object
# println
相关文章:
制作网站的公司有哪些,做一个公司网站要多少钱?
名字制作网站免费,所有小说网站的名字?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
盐城做公司网站,江苏电子版退休证办理流程?
宝塔新建站点为何无法访问?如何排查?
如何获取开源自助建站系统免费下载链接?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
如何构建满足综合性能需求的优质建站方案?
如何通过虚拟机搭建网站?详细步骤解析
如何快速搭建响应式可视化网站?
建站之星代理平台如何选择最佳方案?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
青岛网站建设如何选择本地服务器?
如何在万网自助建站平台快速创建网站?
C#如何序列化对象为XML XmlSerializer用法
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何在服务器上三步完成建站并提升流量?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何用搬瓦工VPS快速搭建个人网站?
购物网站制作公司有哪些,哪个购物网站比较好?
建站之星在线客服如何快速接入解答?
Python lxml的etree和ElementTree有什么区别
免费网站制作appp,免费制作app哪个平台好?
专业网站建设制作报价,网页设计制作要考什么证?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何通过虚拟主机快速搭建个人网站?
如何通过NAT技术实现内网高效建站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
营销式网站制作方案,销售哪个网站招聘效果最好?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
已有域名如何快速搭建专属网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
大型企业网站制作流程,做网站需要注册公司吗?
常州企业网站制作公司,全国继续教育网怎么登录?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何安全更换建站之星模板并保留数据?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Android使用GridView实现日历的简单功能
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
c++ stringstream用法详解_c++字符串与数字转换利器
制作宣传网站的软件,小红书可以宣传网站吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。