您的位置:首页 > 其它

自己实现事件监听

2009-04-13 23:43 260 查看
1.何时需要使用事件监听?
但凡大的项目,各模块都是由不同的程序员开发,但是各模块之间需要进行通讯,用来保证项目的整体性,那么我们可以使用事件监听器来做通讯工具,用来告诉各模块自己模块的一些事件。如: 当用户被删除或者添加的时候,请通知我,我需要要做一些相关的处理事情(如删除用户和组的对应关系)。

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里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: