MyEventTest
package wintys
import javax
import java
import java
import java
/**
* Java的事件機制/自定義事件
運行結果:
do something interesting in source here
listener detects [event]:wintys
listener detects [event]:wintys
* @version
* @author 天堂露珠 ()
* @see
*/
class MyEventTest{
public static void main(String[] args){
MySource source = new MySource();
MyListener myListener = new MyListener(){
public void doMyAction(MyEvent e){
System
}
};
source
source
source
source
source
}
}
/**
* 自定義的事件
* @version
* @author 天堂露珠()
* @see
*/
class MyEvent extends java
private Date date;//記錄事件發生的時間
public MyEvent(Object source
super(source);
this
}
public String toString(){
DateFormat df = new SimpleDateFormat(
String dt = df
return
}
}
/**
* 自定義事件監聽器接口
* @version
* @author 天堂露珠()
* @see
*/
interface MyListener extends java
void doMyAction(MyEvent e);
}
/**
* 自定義事件源
* @version
* @author 天堂露珠()
* @see
*/
class MySource{
/**
* 保存注冊的監聽器列表
* 子類可以使用它保存自己的事件監聽器(非MyListener監聽器)列表
*/
protected EventListenerList listenerList = new EventListenerList();
private MyEvent myEvent = null;//fireDoMyAction()使用此變量
/**
* 沒有做任何事
*/
public MySource(){
}
/**
* 添加一個MyListener監聽器
*/
public void addMyListener(MyListener listener){
listenerList
}
/**
* 移除一個已注冊的MyListener監聽器
* 如果監聽器列表中已有相同的監聽器listener
* 並且listener
* 那麼只移除最近注冊的一個監聽器
*/
public void removeMyListener(MyListener listener){
listenerList
}
/**
* @return 在此對象上監聽的所有MyListener類型的監聽器
*/
public MyListener[] getMyListeners(){
return (MyListener[])listenerList
}
//Winty:Copy directly from javax
/*Notify all listeners that have registered interest for
notification on this event type
is lazily created using the parameters passed into
the fire method
*/
protected void fireDoMyAction() {
// getListenerList() Guaranteed to return a non
Object[] listeners = listenerList
// Process the listeners last to first
// those that are interested in this event
for (int i = listeners
if (listeners[i]==MyListener
// Lazily create the event:
if (myEvent == null)
myEvent = new MyEvent(this
((MyListener)listeners[i+
}
}
}
/**
* 做一些事件源應該做的有意義的事
* 這裡只是一個示例方法
* 例如:MySource如果是一個按鈕
* 當用戶點擊按鈕時調用click()方法
*/
public void doSomething() {
System
fireDoMyAction();//通知監聽器
}
}
EventListenerList是特別需要說明的
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26237.html