Java自定义事件

首先,要清晰事件的参与者:
1、事件(Event),自定义事件均继承自EventObject
2、监听者(Listener),监听者均继承自EventListener
3、触发对象,如Button等,这里的触发对象显然是我们的自定义对象

定义事件

public class BaseEvent extends EventObject {
private static final long serialVersionUID = 1L;
private Object obj;

public BaseEvent(Object source) {
super(source);
this.obj=source;
}

@Override
public Object getSource()
{
return this.obj;
}
}

定义监听者,它是一个接口,里面包含一个自定义的方法

public interface BaseEventListener extends EventListener {
public void processEvent(BaseEvent event);
}

触发对象,BaseEvent事件的触发和监听,均是通过EventBus对象完成的。

public class EventBus {
private Vector rep=new Vector();
BaseEventListener listener;
public void addBaseEventListener(BaseEventListener bl)
{
rep.addElement(bl);
}

public void notifyBaseEvent(Object obj)
{
Enumeration e=rep.elements();
while(e.hasMoreElements())
{
listener=(BaseEventListener) e.nextElement();
listener.processEvent(new BaseEvent(obj));
}
}

}


最后写一段测试代码
	public static void main(String args[])
{
EventBus bus=new EventBus();
bus.addBaseEventListener(new BaseEventListener()
{
@Override
public void processEvent(BaseEvent event) {
System.out.println(event.getSource());

}

});
//触发事件
bus.notifyBaseEvent("test event is ok!");
}


最后打印输出 test event is ok! 当然也可以将任意Object对象当做事件响应后的结果。


-----------------------EventBus升级版-----------------------------
将EventBus做成Static

public class EventBus {
private static EventBus bus=new EventBus();
private Vector<BaseEventListener> rep=new Vector<BaseEventListener>();
BaseEventListener listener;
public void addBaseEventListener(BaseEventListener bl)
{
rep.addElement(bl);
}

public void notifyBaseEvent(Object obj)
{
Enumeration<BaseEventListener> e=rep.elements();
while(e.hasMoreElements())
{
listener=(BaseEventListener) e.nextElement();
listener.processEvent(new BaseEvent(obj));
}
}
public static EventBus getInstance()
{
return bus;
}

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值