自定義JAVA事件監聽機制
阿新 • • 發佈:2018-11-09
JAVA中的事件機制的參與者有3種角色:Event、EventSource、Listener
1.Event:就是事件產生時具體的“事件”,用於Listener的相應的方法之中,作為引數一般存在於Listener的方法之中。
2.EventSource:事件源,它的作用主要是對事件和監聽進行統一管理,具體的接受事件的實體,比如說,你點選一個button,那麼button就是EventSource,這樣你必須使button對某些事件進行響應,你就需要註冊特定的listener,比如說MouseEvent之中的 MouseClicked方法,這時它就必須有了add方法。
3.Listener:具體的進行監聽的事件類,當有其對應的Event產生的時候,它就呼叫相應的方法進行處理。在windows程式設計裡邊這種響應使用callback機制來實現的。
首先,定義事件,使其繼承java.util.EventObject類。
import java.util.EventObject; public class ServerUpdateEvent extends EventObject { private static final long serialVersionUID = 1L; private Object obj; public ServerUpdateEvent(Object source) { super(source); } public Object getObj() { return obj; } }
其次,定義事件監聽管理類,實現對監聽的新增,刪除和啟動
import java.util.ArrayList; import java.util.List; /** * 事件源 * <p/> * Date 2018年9月6日 下午4:24:06 * <p/> * */ public class ServerUpdateEventSource { private static List<ServerUpdateListenerInterface> listeners = new ArrayList<ServerUpdateListenerInterface>(); public ServerUpdateEventSource() { } // 新增一個監聽 public void addServerUpdateEventListener(ServerUpdateListenerInterface e) { listeners.add(e); } // 刪除一個監聽 public void deleteServerUpdateEventListener(ServerUpdateListenerInterface e) { listeners.remove(e); } // 啟用監聽事件 public void fireServerUpdateEvent(ServerUpdateEvent event) { for (ServerUpdateListenerInterface listener : listeners) { listener.handleEvent(event); } } }
第三,定義事件監聽介面和實現 java.util.EventListener
a.介面
import java.util.EventListener;
public interface ServerUpdateListenerInterface extends EventListener {
void handleEvent(ServerUpdateEvent serverUpdateEvent);
}
b.實現
public class ServerUpdateListener implements ServerUpdateListenerInterface {
// 自定義事件被觸發時,根據事件執行以下操作
protected void doReloadExecutors(ServerUpdateEvent e) {
System.out.println(e);
}
@Override
public void handleEvent(ServerUpdateEvent serverUpdateEvent) {
doReloadExecutors(serverUpdateEvent);
}
}
最後上測試
public class ServerListenerTest {
public static void main(String[] args) {
//定義事件源管理實踐
ServerUpdateEventSource eventSource = new ServerUpdateEventSource();
ServerUpdateListener listener = new ServerUpdateListener();
// 註冊監聽,往事件源新增監聽
eventSource.addServerUpdateEventListener(listener);
// 模擬事件觸發
ServerUpdateEvent event = new ServerUpdateEvent("HelloWorld");
// 用事件源啟用事件,最終執行的是監聽實現類裡的@Override方法
eventSource.fireServerUpdateEvent(event);
}
}
執行結果
ServerUpdateEvent[source=HelloWorld]
好了一個簡單的java自定義事件和監聽的例子就實現完畢。