java中的事件机制的参与者有3种角色:
1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中
2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。
3.event listener:对每个明确的事件的发生,都相应地定义一个明确的Java方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口要继承 java.util.EventListener。 实现了事件监听者接口中一些或全部方法的类就是事件监听者。
事件状态对象:
public
class
EventState
extends
EventObject {
private
static
final
long
serialVersionUID
= 1331423214321432154L;
//参数为事件源和状态名
public
EventState(Object
source
,String
state
) {
super
(
source
);
this
.
state
=
state
;
}
private
String
state
=
""
;
public
String getState() {
return
state
;
}
public
void
setState(String
state
) {
this
.
state
=
state
;
}
}
事件监听者(事件处理)
//事件处理器 EventListener
public
abstract
class
Handler
implements
EventListener {
public
Handler(){}
public
void
doHandler(EventState
state
) {
System.
out
.println(
"handler1 执行了,现在状态是:"
);
}
}
事件源(事件的发起和控制)
//事件源
public
class
EventSource {
//事件队列
private
Set<Handler>
eventListeners
;
public
EventSource(){
this
.
eventListeners
=
new
LinkedHashSet<Handler>();
}
public
void
addListeners(Handler
handler
){
this
.
eventListeners
.add(
handler
);
}
public
void
removeListeners(Handler
handler
){
this
.
eventListeners
.remove(
handler
);
}
//事件触发
public
void
triggerEvent1(){
if
(
eventListeners
==
null
) {
return
;
}
//改变事件状态
EventState
state
=
new
EventState(
this
,
"triggerEvent1 sate"
);
notifies(
state
);
}
//事件执行
protected
void
notifies(EventState
sate
){
if
(
eventListeners
.size()>0) {
for
(Handler
handler
:
eventListeners
) {
handler
.doHandler(
sate
);
}
}
}
}
当我们触发这个事件时
public
static
void
main(String[]
args
) {
EventSource
source
=
new
EventSource();
source
.addListeners(
new
Handler(){
//重写事件处理函数
@Override
public
void
doHandler(EventState
state
) {
System.
out
.println(
"handler1 执行了,现在状态是:"
+
state
.toString());
}
});
source
.triggerEvent1();
}