Java 时断时续之————Java事件
1、Java 事件
java中的事件机制的参与者有3种角色:
1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中
2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。
3.event listener:具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。
与jbpm中的 task,event,action 类似
与vb相比,java 的事件机制复杂一些,但功能更强大,也更底层。
事件机制不论表现得多么强大,其本质还是由类属性、方法来完成。
如本例的一个事件源:
- /**
- * 事件源对象,在这里你可以把它想象成一个控制开门关门的遥控器,
- * (如果是在swing中,就类似一个button)
- */
- package test;
- import java.util.*;
- public class DoorManager {
- private Collection listeners;
- /**
- * 添加事件
- * @param listener DoorListener
- */
- public void addDoorListener(DoorListener listener) {
- if (listeners == null) {
- listeners = new HashSet();
- }
- listeners.add(listener);
- }
- /**
- * 移除事件
- * @param listener DoorListener
- */
- public void removeDoorListener(DoorListener listener) {
- if (listeners == null)
- return;
- listeners.remove(listener);
- }
- /**
- * 触发开门事件
- */
- protected void fireWorkspaceOpened() {
- if (listeners == null)
- return;
- DoorEvent event = new DoorEvent(this, "open");
- notifyListeners(event);
- }
- /**
- * 触发关门事件
- */
- protected void fireWorkspaceClosed() {
- if (listeners == null)
- return;
- DoorEvent event = new DoorEvent(this, "close");
- notifyListeners(event);
- }
- /**
- * 通知所有的DoorListener
- */
- private void notifyListeners(DoorEvent event) {
- Iterator iter = listeners.iterator();
- while (iter.hasNext()) {
- DoorListener listener = (DoorListener) iter.next();
- listener.doorEvent(event);
- }
- }
- }
可以看到事件只不过是一个对象DoorEvent event = new DoorEvent(this, "open"); ,只不过DoorEvent一定要继承自EventObject
所谓的事件触发 notifyListeners(event); ,也就是将所有的listerner对象 逐个激发一遍
Iterator iter = listeners.iterator();
- while (iter.hasNext()) {
- DoorListener listener = (DoorListener) iter.next();
- listener.doorEvent(event);
- }
以上是 Java 时断时续之————Java事件 的全部内容, 来源链接: utcz.com/z/392623.html