Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 事件處理_第1頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 事件處理_第2頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 事件處理_第3頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 事件處理_第4頁(yè)
Java程序設(shè)計(jì)基礎(chǔ) 課件 第12章 事件處理_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十二章事件處理12.1事件基本概念12.2委托事件模型12.3事件處理程序本章小結(jié)

12.1事件基本概念

12.1.1事件窗口的事件(event)指的是用戶(hù)使用鼠標(biāo)、鍵盤(pán)在窗口程序中對(duì)窗口組件進(jìn)行的各種操作,例如鼠標(biāo)點(diǎn)擊、進(jìn)入、移動(dòng)、拖動(dòng)以及鍵盤(pán)鍵入等。事件也可以由操作系統(tǒng)觸發(fā),例如時(shí)間計(jì)時(shí)器等,事件類(lèi)的主要類(lèi)層次如圖12-1所示。

圖12-1事件類(lèi)層次結(jié)構(gòu)

java.util.EventObject是所有事件類(lèi)的超類(lèi),具有方法getSource(),用于返回產(chǎn)生某事件的組件對(duì)象(事件源);java.awt.AWTEvent是所有AWT事件的根事件類(lèi),此類(lèi)及其子類(lèi)取代了原來(lái)的java.awt.Event類(lèi),具有方法getID(),返回某事件的ID號(hào)。

Java的部分事件類(lèi)描述如表12-1所示。

12.1.2事件源

事件源(EventSource)即事件發(fā)生的地方,主要指的是事件發(fā)生在哪個(gè)窗口組件上。上述的事件類(lèi)大多與相應(yīng)的事件源對(duì)應(yīng),如表12-2所示。

12.1.3監(jiān)聽(tīng)器接口與監(jiān)聽(tīng)器對(duì)象

窗口組件的事件如何進(jìn)行處理呢?Java將窗口組件的事件處理“委托”給監(jiān)聽(tīng)器對(duì)象來(lái)完成,監(jiān)聽(tīng)器對(duì)象是監(jiān)聽(tīng)器接口的實(shí)現(xiàn)類(lèi)對(duì)象。

1.監(jiān)聽(tīng)器接口

Java的接口java.util.EventListener是所有監(jiān)聽(tīng)器接口的父接口,該父接口下約有70多個(gè)子接口,較為常用的接口如表12-3所示。

不同的監(jiān)聽(tīng)器接口監(jiān)聽(tīng)的事件源不同,監(jiān)聽(tīng)的具體事件也不同;在監(jiān)聽(tīng)器接口中聲明了被監(jiān)聽(tīng)組件發(fā)生相應(yīng)事件時(shí)應(yīng)該被調(diào)用的事件處理方法,方法的具體代碼由監(jiān)聽(tīng)器接口的實(shí)現(xiàn)類(lèi)來(lái)完成。例如鍵盤(pán)監(jiān)聽(tīng)器接口KeyListener將監(jiān)聽(tīng)某個(gè)窗口組件的鍵盤(pán)事件,接口的定義如下:

鍵盤(pán)監(jiān)聽(tīng)器接口KeyListener聲明了三個(gè)方法監(jiān)聽(tīng)某個(gè)組件上對(duì)應(yīng)的事件,當(dāng)事件發(fā)生時(shí)將調(diào)用相應(yīng)的方法:

(1)鍵盤(pán)按鍵被按下,調(diào)用keyPressed方法。

(2)鍵盤(pán)按鍵抬起來(lái),調(diào)用keyReleased方法。

(3)鍵盤(pán)按鍵被敲擊一次,調(diào)用keyTyped方法。

2.監(jiān)聽(tīng)器對(duì)象

監(jiān)聽(tīng)器對(duì)象是監(jiān)聽(tīng)器接口實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象,該對(duì)象具有監(jiān)聽(tīng)窗口組件指定事件的能力,當(dāng)該事件在窗口組件上發(fā)生時(shí),監(jiān)聽(tīng)器對(duì)象能夠獲取該事件對(duì)象并執(zhí)行預(yù)定義的方法,用以實(shí)現(xiàn)事件處理。

對(duì)于不同組件可能發(fā)生的對(duì)應(yīng)事件,需要選擇相應(yīng)的監(jiān)聽(tīng)器接口,自定義監(jiān)聽(tīng)器類(lèi)實(shí)現(xiàn)該接口,將事件發(fā)生時(shí)要執(zhí)行的動(dòng)作代碼寫(xiě)到接口聲明的方法中,然后創(chuàng)建監(jiān)聽(tīng)器對(duì)象與被監(jiān)聽(tīng)的組件進(jìn)行綁定,就可以“坐等”該組件上指定事件的發(fā)生。

12.1.4監(jiān)聽(tīng)器適配器

監(jiān)聽(tīng)器適配器(ListenerAdapter)是空實(shí)現(xiàn)了對(duì)應(yīng)監(jiān)聽(tīng)器接口的類(lèi),即監(jiān)聽(tīng)器適配器將監(jiān)聽(tīng)器接口的所有方法進(jìn)行了實(shí)現(xiàn),但是方法體為空,這樣可方便程序員繼承監(jiān)聽(tīng)器適配器而不用實(shí)現(xiàn)監(jiān)聽(tīng)器接口,如圖12-2所示。

圖12-2監(jiān)聽(tīng)器適配器

因?yàn)檫m配器已經(jīng)空實(shí)現(xiàn)了監(jiān)聽(tīng)器的所有抽象方法,對(duì)于自定義監(jiān)聽(tīng)器類(lèi)而言,繼承了適配器也就相當(dāng)于空實(shí)現(xiàn)了監(jiān)聽(tīng)器接口。對(duì)于接口中的多個(gè)抽象方法,需要在哪個(gè)方法中寫(xiě)事件處理代碼,只需要重寫(xiě)那個(gè)方法即可,其它不需要的方法可以不用管。常用監(jiān)聽(tīng)器對(duì)應(yīng)的適配器如表12-4所示。

12.2委托事件模型

從前面對(duì)Java事件處理的基本概念的描述可知,窗口組件對(duì)事件的處理是“委托”給監(jiān)聽(tīng)器對(duì)象來(lái)完成的,而事件處理要求Java程序員需要做的有以下幾步:(1)編寫(xiě)自定義監(jiān)聽(tīng)器類(lèi),可以實(shí)現(xiàn)對(duì)應(yīng)的監(jiān)聽(tīng)器接口,也可以繼承對(duì)應(yīng)的監(jiān)聽(tīng)器適配器,在該類(lèi)中實(shí)現(xiàn)/重寫(xiě)對(duì)應(yīng)事件的處理方法。

(2)使用自定義監(jiān)聽(tīng)器類(lèi)創(chuàng)建監(jiān)聽(tīng)器對(duì)象,將該對(duì)象與要監(jiān)聽(tīng)的窗口組件進(jìn)行“關(guān)聯(lián)”。

(3)當(dāng)該窗口組件上被監(jiān)聽(tīng)的事件發(fā)生時(shí),就會(huì)被監(jiān)聽(tīng)器對(duì)象監(jiān)聽(tīng)到并獲得該事件對(duì)象,然后自動(dòng)執(zhí)行預(yù)定義的事件處理方法。

該模型如圖12-3所示。圖12-3委托事件模型

圖12-3中,要注意兩類(lèi)線(xiàn)型:

(1)虛線(xiàn)說(shuō)明:

①需要在程序中預(yù)先定義好監(jiān)聽(tīng)器接口實(shí)現(xiàn)類(lèi)。

②在監(jiān)聽(tīng)器類(lèi)中要完成具體的事件處理方法,即預(yù)先定義的事件處理的動(dòng)作代碼。

③將監(jiān)聽(tīng)器實(shí)現(xiàn)類(lèi)產(chǎn)生的監(jiān)聽(tīng)器對(duì)象與窗口組件進(jìn)行注冊(cè)/綁定。

(2)實(shí)線(xiàn)說(shuō)明:

①當(dāng)用戶(hù)有鼠標(biāo)或鍵盤(pán)的操作在被監(jiān)聽(tīng)的窗口組件上發(fā)生時(shí),系統(tǒng)將產(chǎn)生相應(yīng)的事件對(duì)象。

②事件源組件將事件對(duì)象傳遞給已注冊(cè)的監(jiān)聽(tīng)器對(duì)象,然后由監(jiān)聽(tīng)器對(duì)象接管事件處理,展現(xiàn)出預(yù)定義的事件處理動(dòng)作。

12.3事件處理程序

12.3.1標(biāo)準(zhǔn)事件處理JButton按鈕組件的標(biāo)準(zhǔn)動(dòng)作是點(diǎn)擊鼠標(biāo)左鍵,該動(dòng)作將產(chǎn)生ActionEvent事件對(duì)象,然后由ActionListener監(jiān)聽(tīng)器實(shí)現(xiàn)類(lèi)的對(duì)象來(lái)監(jiān)聽(tīng)該事件并進(jìn)行處理,ActionListener接口只定義了一個(gè)方法:publicvoidactionPerformed(ActionEvent

e);

按照上述委托事件模型的描述,對(duì)按鈕的事件進(jìn)行處理,只需要完成下面兩步操作:

(1)編寫(xiě)監(jiān)聽(tīng)器接口實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)ActionListener接口,在actionPerformed方法中寫(xiě)入點(diǎn)擊按鈕的將要實(shí)現(xiàn)的動(dòng)作代碼。

(2)將該用戶(hù)自定義監(jiān)聽(tīng)器類(lèi)的對(duì)象與按鈕組件進(jìn)行注冊(cè)(綁定)。

完成以上兩步操作后,當(dāng)用戶(hù)使用鼠標(biāo)點(diǎn)擊該按鈕時(shí),預(yù)定義的事件處理動(dòng)作代碼就會(huì)被自動(dòng)運(yùn)行。

程序結(jié)果:.

點(diǎn)擊第一個(gè)按鈕結(jié)果

點(diǎn)擊第二個(gè)按鈕結(jié)果:

12.3.2標(biāo)準(zhǔn)事件處理的另外兩種形式

上述標(biāo)準(zhǔn)事件處理的程序結(jié)構(gòu)形式是在BookView類(lèi)中定義了一個(gè)用戶(hù)自定義監(jiān)聽(tīng)器的內(nèi)部類(lèi)MyButtonListener,這是一種比較常用的程序結(jié)構(gòu),還可以使用下面兩種形式來(lái)完成事件處理。

1.?BookView1類(lèi)自己實(shí)現(xiàn)ActionListener接口

程序結(jié)果:

程序結(jié)構(gòu)與上述程序運(yùn)行結(jié)果是一樣的,在此不再重復(fù)。

2.?BookView2類(lèi)使用匿名監(jiān)聽(tīng)器類(lèi)的方式

程序結(jié)果:

程序結(jié)構(gòu)與上述程序運(yùn)行結(jié)果是一樣的,在此不再重復(fù)。

12.3.3具體事件處理

上述程序是標(biāo)準(zhǔn)事件處理,主要是監(jiān)聽(tīng)處理一些組件的標(biāo)準(zhǔn)動(dòng)作。如果想針對(duì)更為具體的組件事件進(jìn)行處理,就需要實(shí)現(xiàn)具體的事件監(jiān)聽(tīng)器接口。

程序結(jié)果:

本章小結(jié)1.事件是可能發(fā)生在窗口組件上的各種動(dòng)作,包括鍵盤(pán)、鼠標(biāo)的動(dòng)作,窗口拉伸,焦點(diǎn)的獲得與失去等等,java.util.EventObject下面的各個(gè)事件子類(lèi)與這些事件對(duì)應(yīng)。2.事件源是事件發(fā)生的地方,不同的窗口組件作為事件源對(duì)應(yīng)不同的事件。3.不同的事件監(jiān)聽(tīng)器接口對(duì)應(yīng)不同組件上可能發(fā)生的事件,聲明了相應(yīng)的監(jiān)聽(tīng)方法,就表示當(dāng)監(jiān)聽(tīng)到組件上發(fā)生的事件時(shí)要執(zhí)行相應(yīng)的方法,具體代碼由實(shí)現(xiàn)監(jiān)聽(tīng)器接口的實(shí)現(xiàn)類(lèi)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論