陈亮
ChenLiang
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();
}
}
posted on 2009-06-06 00:22
陈亮
阅读(2696)
评论(0)
编辑
收藏
所属分类:
Java
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
英文系统上使用ssh2+mysql乱码问题解决
Applet 在web项目中显示ClassNotFoundException的解决办法
JAVA自定义事件监听完整例子---sunfruit[转]
Javascript的IE和Firefox兼容性汇编
用s:action实现jsp页面导入action
在myeclipse上配置SVN
eclipse配置CVS实现远程代码管理
Struts2与FCKeditor上传问题解决办法
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
统计
随笔 - 1
文章 - 7
评论 - 3
引用 - 0
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
文章分类
(8)
Java(8)
(rss)
Linux
(rss)
文章档案
(8)
2013年4月 (1)
2012年8月 (1)
2009年6月 (1)
2009年4月 (2)
2008年12月 (3)
搜索
最新评论
1. re: 用s:action实现jsp页面导入action
是
--4
2. re: Applet 在web项目中显示ClassNotFoundException的解决办法
评论内容较长,点击标题查看
--Judy
3. re: 用s:action实现jsp页面导入action[未登录]
谢谢
--joyce