2008-02-21
如何实现自己的事件监听器
关键字: 事件监听
1.何时需要使用事件监听?
但凡大的项目,各模块都是由不同的程序员开发,但是各模块之间需要进行通讯,用来保证项目的整体性,那么我们可以使用事件监听器来做通讯工具,用来告诉各模块自己模块的一些事件。如: 当用户被删除或者添加的时候,请通知我,我需要要做一些相关的处理事情(如删除用户和组的对应关系)。
2.创建自己的事件监听器?
2.1 添加事件源
事件源就是你需要监听的对象(类似于swing里的button),本示例将资产类型作为事件源进行讲解。
2.2添加事件状态类
事件状态类,用来描述这个事件源的状态。
2.3 添加事件监听器
事件监听器就是向外界声明,事件源所有可能发生的事件。
本例中如果需要监听资产类型的事件,就必须实现这个接口。
2.4通知监听者
当你执行操作的时候需要通知监听者。
3.如何使用事件监听器?
3.1.实现监听器接口
需要监听的类实现资产类型监听器接口implements AssetTypeListenner
实现这个接口以后,需要监听的类必须实现接口里两个方法,用来处理你的业务逻辑,
在方法里你可以通过assetEvent.getAssetType()来得到资产类型对象。
3.2.注册您的监听器
实现了监听器接口的类被称为监听者,监听者必须注册到assetTypeListenners里。
但凡大的项目,各模块都是由不同的程序员开发,但是各模块之间需要进行通讯,用来保证项目的整体性,那么我们可以使用事件监听器来做通讯工具,用来告诉各模块自己模块的一些事件。如: 当用户被删除或者添加的时候,请通知我,我需要要做一些相关的处理事情(如删除用户和组的对应关系)。
2.创建自己的事件监听器?
2.1 添加事件源
事件源就是你需要监听的对象(类似于swing里的button),本示例将资产类型作为事件源进行讲解。
public class AssetType {
private String typeId;
public String getTypeId() {
return typeId;
}
public void setTypeId(String typeId) {
this.typeId = typeId;
}
/**
* 用于存储事件监听者
*/
private EventListenerList assetListenners;
/**
* 通知注册删除资产的监听者
*/
@Transient
public void notifyDeleteAssetEvent() {
Object[] listenners = assetListenners.getListenerList();
for (Object listenner : listenners) {
if (listenner instanceof AssetTypeListenner) {
AssetTypeListenner assetListenner;
assetListenner = (AssetTypeListenner) listenner;
assetListenner.deleteAssetTypeEvent(new AssetTypeEvent(this));
}
}
}
/**
* 通知注册添加资产的监听者
*/
@Transient
public void notifyAddAssetEvent() {
Object[] listenners = assetListenners.getListenerList();
for (Object listenner : listenners) {
if (listenner instanceof AssetTypeListenner) {
AssetTypeListenner assetListenner;
assetListenner = (AssetTypeListenner) listenner;
assetListenner.addAssetTypeEvent(new AssetTypeEvent(this));
}
}
}
public EventListenerList getAssetListenners() {
return assetListenners;
}
public void setAssetListenners(EventListenerList assetListenners)
{
this.assetListenners = assetListenners;
}
}
2.2添加事件状态类
事件状态类,用来描述这个事件源的状态。
public class AssetTypeEvent extends EventObject {
private AssetType assetType;
public AssetTypeEvent(Object source) {
super(source);
assetType = (AssetType) source;
}
private static final long serialVersionUID = 1L;
public AssetType getAssetType() {
return assetType;
}
public void setAssetType(AssetType assetType) {
this.assetType = assetType;
}
}
2.3 添加事件监听器
事件监听器就是向外界声明,事件源所有可能发生的事件。
本例中如果需要监听资产类型的事件,就必须实现这个接口。
public interface AssetTypeListenner extends EventListener {
/**
* 删除资产类型
* @param assetEvent
*/
public void deleteAssetTypeEvent(AssetTypeEvent assetEvent);
/**
* 添加资产类型
* @param assetEvent
*/
public void addAssetTypeEvent(AssetTypeEvent assetEvent);
}
2.4通知监听者
当你执行操作的时候需要通知监听者。
private List<AssetTypeListenner> assetTypeListenners; assetType.setAssetListenners(assetTypeListenners);//添加所有监听者 assetType.notifyDeleteAssetEvent();//通知监听者
3.如何使用事件监听器?
3.1.实现监听器接口
需要监听的类实现资产类型监听器接口implements AssetTypeListenner
实现这个接口以后,需要监听的类必须实现接口里两个方法,用来处理你的业务逻辑,
public void addAssetTypeEvent(AssetTypeEvent assetEvent) {
System.out.println("我知道了,资产类型"+assetEvent.getAssetType().getTypeName()+"将要添加");
}
public void deleteAssetTypeEvent(AssetTypeEvent assetEvent) {
System.out.println("我知道了,资产类型"+assetEvent.getAssetType().getTypeName()+"将要删除");
}
在方法里你可以通过assetEvent.getAssetType()来得到资产类型对象。
3.2.注册您的监听器
实现了监听器接口的类被称为监听者,监听者必须注册到assetTypeListenners里。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 79800 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
J2EE开发注意事项
写绝对路径,在移动文件到其他文件夹的时候,不需要修改代码。
-- by fantasy -
J2EE开发注意事项
5.页面上的地址原则上写绝对路径。 是何道理呢? 相对路径先定位到根,然后定 ...
-- by nwangwei -
深入osworkflow的function
kathytingzi 写道怎么实现会签阿,谢谢啦 增加两个conditon, ...
-- by fantasy -
使用Filter控制页面的权限
恩,是面向切面。过滤器可以看成是一个切面。
-- by fantasy -
深入osworkflow的function
工作流初学者: 参考:http://hi.baidu.com/vjame/blo ...
-- by amuj2ee






评论排行榜