java中的事件机制的参与者有3种角色:
1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中
2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。
3.event listener:对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。 实现了事件监听者接口中一些或全部方法的类就是事件监听者。
伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参传递给应响应该事件的监听者方法中。发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。
具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。
温故知新也:一个开关按钮,开关就是事件源,开关的状态:打开或者关闭就是事件状态,事件监听:当开关打开的时候灯就亮了,开关关闭的时候灯就灭了。
事件源addlistener(事件监听),事件源的状态set(打开),事件监听:打开灯,灯亮
事件:定义一个上班族类,分为上班和休息两个状态
package com.java.listener;
import java.util.EventObject;
public class Worker_EventObject extends EventObject {
//分为上班和休息两个分类
public String state="";
public Worker_EventObject(Object souce ,String state) {
super(souce);
this.state=state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
EventListener 自定义接口
package com.java.listener;
import java.util.EventListener;
public interface workerListener_EventListener extends EventListener {
//自定义的接口
public void workerState(Worker_EventObject wokerstate);
}
实现自定义接口
package com.java.listener;
public class workerEventListener_myself implements workerListener_EventListener {
public workerEventListener_myself() {
}
@Override
public void workerState(Worker_EventObject wokerstate) {//对事件状态
if(wokerstate.getState()!=null&&wokerstate.getState().equals("rest")){
System.out.println("今天我休息!");
}else{
System.out.println("今天我上班!");
}
}
}
EventSource事件源
package com.java.listener;
import java.util.HashSet;
import java.util.Iterator;
public class wokerManager_EventSouce {
public HashSet<workerEventListener_myself> listeners;
//添加监听
public void addListener(workerEventListener_myself listener) {
if (listener != null) {
listeners = new HashSet<workerEventListener_myself>();
}
listeners.add(listener);
}
//设定状态
public void setState(String state) {
Worker_EventObject wk = null;
if (!state.trim().equals("")) {
wk = new Worker_EventObject(this, state);
}
notifyListeners(wk);
}
//通知监听
private void notifyListeners(Worker_EventObject event) {
Iterator iter = listeners.iterator();
while (iter.hasNext()) {
workerEventListener_myself listener = (workerEventListener_myself) iter.next();
listener.workerState(event);
}
}
}
测试一下
package com.java.listener;
public class shijianTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
wokerManager_EventSouce wm=new wokerManager_EventSouce();
wm.addListener(new workerEventListener_myself());
wm.setState("woker");
}
}
运行结果:
今天我上班!