事件監(jiān)聽(tīng)器為對(duì)象提供了一種普適的不經(jīng)過(guò)繼續(xù)關(guān)系而進(jìn)行通訊的方法。正因?yàn)槿绱耍麄儗?duì)于組件技術(shù)來(lái)說(shuō),是一種非常好的通訊機(jī)制,從某種角度來(lái)講,它們即是JavaBeans。雖然上面看到的事件監(jiān)聽(tīng)器全都出現(xiàn)在AWT中,但他們的應(yīng)用不僅僅限于用戶接口。他們可以被應(yīng)用于各式各樣的事件:屬性的變更,傳感器的閱讀,時(shí)鐘事件,文件系統(tǒng)行為,對(duì)象命名等。
現(xiàn)在開(kāi)始“Beany”部分
#你能夠?yàn)樗鼈兌x你自己的事件類型和事件監(jiān)聽(tīng)器。
#假如你的新事件類型被稱為Eventtype,那么通過(guò)實(shí)現(xiàn)下面兩個(gè)方法,你的Beans就能成為你的新事件類型的源。
o addEventtypeListener(EventObject e)
o removeEventtypeListener(EventObject e)
#那么通過(guò)實(shí)現(xiàn)接口EventListener,其它Beans能夠成為事件的目標(biāo)。
#最后,你可以通過(guò)調(diào)用sourceBean。addEventtypeListener(targetBean)"接通"事件的源和事件目標(biāo)。
創(chuàng)建和利用你自已的EventObject類型
讓我們看一個(gè)創(chuàng)建EventObject類型的例子。這個(gè)例子是在上個(gè)月的一個(gè)例子,BarChartBean的基礎(chǔ)上進(jìn)行"腦外科式"(brainsurgery)的改造而成的。我先在BarChartBean中增加代碼,以使得在Bar區(qū)域內(nèi),用戶每次點(diǎn)擊或拖動(dòng)鼠標(biāo)時(shí),都重先設(shè)置percent屬性。這為我們提供了一個(gè)通過(guò)鼠標(biāo)來(lái)改變Percent屬性的方法。
BarChartBean通過(guò)預(yù)先定義的PRopertyChangeListener接口(在java。beans包中定義的,通用的事件監(jiān)聽(tīng)器接口),來(lái)通知其它對(duì)象它的percent屬性變化情況。現(xiàn)在,我們通過(guò)定義一個(gè)新的事件類型,PercentEvent,為外部Beans增加另一個(gè)方法,以使這些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_; }
}
你是否還記得,在前面我們?cè)岬竭^(guò)在事件中封裝類規(guī)范(class-specific)數(shù)據(jù)?妤了,在此,新的和舊的百分比值都規(guī)范于PercentEvent事件類。
現(xiàn)在,讓我們?yōu)檫@一新的事件類型定義一個(gè)監(jiān)聽(tīng)器接口。
import java.util.*;
//每一個(gè)想監(jiān)聽(tīng)"percent"變化情況的類都
//應(yīng)該實(shí)現(xiàn)這個(gè)接口
public interface PercentListener extends EventListener
{
public void percentChanged(EventObject e);
}
|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注