在JAVA程序設計中 事件的處理是非常重要的 尤其是在需要自定義事件和設計JavaBean時 對事件的處理過程有壹個完整的認識對於編程是很有幫助的
下面用壹個演示性的例子來說明事件及其處理過程
壹 事件的組成
如果想要自定義壹個事件 則必須提供壹個事件的監聽接口以及壹個事件類 在JAVA中監聽接口繼承java util EventListener 事件類繼承java util EventObject 很多基本的事件在編程環境中都已經提供可以很方便使用 但是在自定義事件中必須要要了解這些
下面是壹個事件類的代碼 事件類可以向用戶處理程序提供被監聽類的信息
import java util *;
public class PropertyEvent extends EventObject {
public PropertyEvent(){}
}
下面是監聽接口的代碼
import java util *;
public interface PropertyListener extends EventListener {
public void propertyChanged(PropertyEvent propertyEvent);
}
二 事件的處理機制
下面是壹段簡要的被監聽類代碼 通過代碼分析事件處理過程
import java util *;
public class Exam {
private int property;
//listeners用來存放已註冊的監聽對象
private Set listeners= new HashSet();
public void addListener(PropertyListener propertyListener){
//listeners必須保證只能被壹個線程訪問
synchronized(listeners){
listeners add(propertyListener);
}
}
public void firePropertyChange(){
Iterator iterator;
synchronized(listeners){
//將listeners中的類名放到iterator
iterator = new HashSet(erator();
}
//創建事件類
PropertyEvent propertyEvent = new PropertyEvent();
while(iterator hasNext()){
PropertyListener propertyListener = (propertyListener) iterator next();
//調用用戶的事件處理程序
propertyListener propertyChanged(propertyEvent);
}
}
}
當屬性值發生變化時 首先進行內部處理調用firePropertyChange方法 產生壹個事件對象然後用事件對象為參數來調用用戶的事件處理程序
三 事件處理的使用
基本用法
public Exam exam;
exam addListener(this);
public void propertyChange(PropertyEvent event){ }
註 exam是被監聽對象 this為監聽對象 是已經實現了接口方法的當前類 addListener
將當前類註冊到listeners
壹個被監聽對象可以有多個監聽對象
exam addListener(listener );
exam addListener(listener );
這樣當exam的property發生變化時 actionListener 和actionListener 的處理程序都會
被調用 當然listener 和listener 必須都是已實現接口方法的類
被監聽的對象也可以是實現了方法的接口
exam addListener(
new PropertyListener(){
//用戶定義事件處理過程
public void propertyChange(PropertyEvent event){
}
);
lishixinzhi/Article/program/Java/hx/201311/26740