Java事件处理机制
2017-07-12 00:00
417 查看
1、事件角色
java中的事件机制的参与者有3种角色:event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中
event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。
event listener:事件监听者。对每个明确的事件的发生,都相应地定义一个明确的Java方法。
2、Java 实现
主要的API:事件状态类:java.util.EventObject
事件监听接口:java.util.EventListener
我们需要定义的类/接口有:
类名 | 功能 | 父类/父接口 |
事件状态类 | 持有事件触发改变的“状态属性” | EventObject |
事件监听接口 | 定义事件触发以后,根据不同状态属性的抽象操作方法 | EventListener |
具体的监听实现类(可以有多个) | 提供具体的,根据不同状态属性的操作 | 事件监听接口 |
事件源类 | 1、持有监听类,并提供注册功能 2、提供触发事件的功能,触发事件的同时,通知监听器 | 无 |
事件状态类:
/** * Created by 兴趣使然的程序员 on 2017/7/12. * 事件状态类 * 持有事件触发改变的“状态属性” */ public class EventState extends EventObject { private String state; public void setDoorState(String state) { this.state = state; } public String getDoorState() { return this.state; } /** * Constructs a prototypical Event. * * @param source The object on which the Event initially occurred. * @throws IllegalArgumentException if source is null. */ public EventState(Object source) { super(source); } }
事件监听接口:
/** * Created by 兴趣使然的程序员 on 2017/7/12. * 事件监听接口 */ public interface StateListener extends EventListener { void doorEvent(EventState event); }
事件源类:
/** * Created by 兴趣使然的程序员 on 2017/7/12. * 具体的事件源类 * */ public class EventSource { private ConcurrentLinkedQueue<StateListener> listeners; /** * 添加监听 */ public void addListener(StateListener stateListener) { if (listeners == null) { listeners = new ConcurrentLinkedQueue(); } listeners.add(stateListener); } /** * 移除监听 */ public void removeListener(StateListener stateListener) { if (listeners == null) return; listeners.remove(stateListener); } /** * 触发事件,更改事件状态 */ protected void fireStateChange(String doorState) { if (listeners == null) return; EventState event = new EventState(this); event.setDoorState(doorState); notifyListeners(event); } /** * 通知所有的DoorListener,让Listener对状态变化做出响应操作 */ private void notifyListeners(EventState event) { for(StateListener stateListener:listeners) stateListener.doSomethingForEvent(event); } }
使用:
/** * Created by 兴趣使然的程序员 on 2017/7/12. */ public class Test { public static void main(String[] args) { EventSource eventSource = new EventSource(); //添加一个监听,并同时定义根据事件状态变化做出的操作 eventSource.addListener(new ListenerA()); eventSource.fireStateChange("啦啦啦"); } } class ListenerA implements StateListener{ @Override public void doSomethingForEvent(EventState event) { String doorState = event.getDoorState(); System.out.println(doorState); //触发事件以后,将自己移除 ((EventSource)event.getSource()).removeListener(this); } }
相关文章推荐
- 用Java事件处理机制实现录制回放功能
- JAVA事件处理机制小议
- Java事件处理机制-自定义事件
- Java的事件处理机制
- Java事件处理机制
- java .net MFC QT事件处理机制
- JAVA事件处理机制
- java事件处理机制(自定义事件)【转】
- java中事件处理机制
- java 事件处理机制
- Java事件处理机制 - 事件监听器的四种实现方式
- 利用Java事件处理机制实现录制、回放功能
- java事件处理机制
- Java的事件处理机制
- 程序员手记:Java与C#的事件处理机制
- Flex、Java、C#、JavaFX的事件处理机制的比较
- java的事件处理机制
- java事件处理机制--事件监听器的四种实现机制(1)
- Java与C#的事件处理机制(zt)
- Java的事件处理机制