事件監聽器為對象提供了一種普適的不經過繼續關系而進行通訊的方法。正因為如此,他們對于組件技術來說,是一種非常好的通訊機制,從某種角度來講,它們即是JavaBeans。雖然上面看到的事件監聽器全都出現在AWT中,但他們的應用不僅僅限于用戶接口。他們可以被應用于各式各樣的事件:屬性的變更,傳感器的閱讀,時鐘事件,文件系統行為,對象命名等。
現在開始“Beany”部分
#你能夠為它們定義你自己的事件類型和事件監聽器。
#假如你的新事件類型被稱為Eventtype,那么通過實現下面兩個方法,你的Beans就能成為你的新事件類型的源。
o addEventtypeListener(EventObject e)
o removeEventtypeListener(EventObject e)
#那么通過實現接口EventListener,其它Beans能夠成為事件的目標。
#最后,你可以通過調用sourceBean。addEventtypeListener(targetBean)"接通"事件的源和事件目標。
創建和利用你自已的EventObject類型
讓我們看一個創建EventObject類型的例子。這個例子是在上個月的一個例子,BarChartBean的基礎上進行"腦外科式"(brainsurgery)的改造而成的。我先在BarChartBean中增加代碼,以使得在Bar區域內,用戶每次點擊或拖動鼠標時,都重先設置percent屬性。這為我們提供了一個通過鼠標來改變Percent屬性的方法。
BarChartBean通過預先定義的PRopertyChangeListener接口(在java。beans包中定義的,通用的事件監聽器接口),來通知其它對象它的percent屬性變化情況。現在,我們通過定義一個新的事件類型,PercentEvent,為外部Beans增加另一個方法,以使這些Beans能夠被通知到每一次percent的變化。
import java.util.*;
//
//該類封裝每一次Percent屬性的變化,并將變化傳遞給"PercentListener".
//
public class PercentEvent extends java.util.EventObject
{
protected int iOld_, iNew_;
public PercentEvent(Object source, int iOld, int iNew)
{
super(source);
iOld_ = iOld;
iNew_ = iNew;
}
public int getOldPercent() { return iOld_; }
public int getPercent() { return iNew_; }
public int getChangedBy() { return iNew_ - iOld_; }
}
你是否還記得,在前面我們曾提到過在事件中封裝類規范(class-specific)數據?妤了,在此,新的和舊的百分比值都規范于PercentEvent事件類。
現在,讓我們為這一新的事件類型定義一個監聽器接口。
import java.util.*;
//每一個想監聽"percent"變化情況的類都
//應該實現這個接口
public interface PercentListener extends EventListener
{
public void percentChanged(EventObject e);
}
新聞熱點
疑難解答