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();
}