應(yīng)用前邊兩節(jié)上一章節(jié)的內(nèi)容,大家可以完成一個(gè)簡(jiǎn)單的界面,但是沒(méi)有任何的功能,界面完全是靜態(tài)的,如果要實(shí)現(xiàn)具體功能的話,必須要學(xué)習(xí)事件模型。
事件模型簡(jiǎn)介及常見(jiàn)事件模型
對(duì)于采用了圖形用戶界面的程序來(lái)說(shuō),事件控制是非常重要的。
一個(gè)源(事件源)產(chǎn)生一個(gè)事件并把它(事件對(duì)象)送到一個(gè)或多個(gè)監(jiān)聽(tīng)器那里,監(jiān)聽(tīng)器只是簡(jiǎn)單地等待,直到它收到一個(gè)事件,一旦事件被接收,監(jiān)聽(tīng)器將處理這些事件。
一個(gè)事件源必須注冊(cè)監(jiān)聽(tīng)器以便監(jiān)聽(tīng)器可以接收關(guān)于一個(gè)特定事件的通知。
每種類型的事件都有其自己的注冊(cè)方法,一般形式為:
void addTypeListener(TypeListener e);
注意:
注冊(cè)事件的方法名并不真的是addTypeListener,其中的Type是事件類型,根據(jù)不同的事件追加不同類型的監(jiān)聽(tīng),如:追加按鈕按下事件的添加監(jiān)聽(tīng)方法為:addActionListener(ActionEvent? e),而e是一個(gè)事件監(jiān)聽(tīng)器的引用。
事件控制的過(guò)程
事件控制過(guò)程可以分為以下四步:
1. 監(jiān)聽(tīng)器對(duì)象屬于一個(gè)類的實(shí)例,這個(gè)類實(shí)現(xiàn)了一個(gè)特殊的接口,名為“監(jiān)聽(tīng)者接口”(Listener interface)。
2. 事件源是一個(gè)對(duì)象,它可以注冊(cè)一個(gè)或多個(gè)監(jiān)聽(tīng)器對(duì)象,以便向其發(fā)送事件對(duì)象。
3. 事件源在發(fā)生事件時(shí)向所有注冊(cè)的監(jiān)聽(tīng)器發(fā)送事件對(duì)象。
4. 監(jiān)聽(tīng)器對(duì)象根據(jù)事件對(duì)象中封裝的信息來(lái)確定如何響應(yīng)這個(gè)事件。
如果覺(jué)得這個(gè)過(guò)程比較抽象,那么我們看看這樣一個(gè)場(chǎng)景:在城市的十字路口上為了監(jiān)控交通違章,那么在路口上(事件源)就會(huì)安裝一個(gè)監(jiān)控?cái)z像頭(監(jiān)聽(tīng)器對(duì)象),這個(gè)監(jiān)控?cái)z像頭在有違章發(fā)生時(shí)(事件觸發(fā)時(shí))會(huì)自動(dòng)捕獲違章,然后傳達(dá)到監(jiān)控大廳,監(jiān)控大廳根據(jù)違章情況作出相應(yīng)的處理(事件響應(yīng),也可以說(shuō)是事件處理,就是發(fā)生事件后做什么處理方式)。
那么我們不難發(fā)現(xiàn)這樣一個(gè)事實(shí):出現(xiàn)不同的事件需要用不同的事件類來(lái)捕獲。如圖1所示,為常用的事件類的體系結(jié)構(gòu)。
我們?cè)賮?lái)看看事件類型的具體說(shuō)明,如表1所示。

下節(jié)我們會(huì)對(duì)幾種常用的事件類型進(jìn)行詳細(xì)介紹。
「全棧Java筆記」是一部能幫大家從零到一成長(zhǎng)為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作,從小白逐漸做到工程師、高級(jí)工程師、架構(gòu)師。精通Java平臺(tái)軟件開(kāi)發(fā),精通JAVAEE,熟悉各種流行開(kāi)發(fā)框架。
筆記包含從淺入深的六大部分:
A-Java入門(mén)階段
B-數(shù)據(jù)庫(kù)從入門(mén)到精通
C-手刃移動(dòng)前端和Web前端
D-J2EE從了解到實(shí)戰(zhàn)
E-Java高級(jí)框架精解
F-Linux和Hadoop