论坛首页 Java版 企业应用

如何实现自己的事件监听器

浏览 429 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-02-22 关键字: 事件监听
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里。
   
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐