版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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)指的是用戶使用鼠標(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í)器等,事件類的主要類層次如圖12-1所示。
圖12-1事件類層次結(jié)構(gòu)
java.util.EventObject是所有事件類的超類,具有方法getSource(),用于返回產(chǎn)生某事件的組件對(duì)象(事件源);java.awt.AWTEvent是所有AWT事件的根事件類,此類及其子類取代了原來(lái)的java.awt.Event類,具有方法getID(),返回某事件的ID號(hào)。
Java的部分事件類描述如表12-1所示。
12.1.2事件源
事件源(EventSource)即事件發(fā)生的地方,主要指的是事件發(fā)生在哪個(gè)窗口組件上。上述的事件類大多與相應(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)類對(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)完成。例如鍵盤(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)類的實(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)器類實(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)器接口的類,即監(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)器類而言,繼承了適配器也就相當(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)器類,可以實(shí)現(xiàn)對(duì)應(yīng)的監(jiān)聽(tīng)器接口,也可以繼承對(duì)應(yīng)的監(jiān)聽(tīng)器適配器,在該類中實(shí)現(xiàn)/重寫(xiě)對(duì)應(yīng)事件的處理方法。
(2)使用自定義監(jiān)聽(tīng)器類創(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中,要注意兩類線型:
(1)虛線說(shuō)明:
①需要在程序中預(yù)先定義好監(jiān)聽(tīng)器接口實(shí)現(xiàn)類。
②在監(jiān)聽(tīng)器類中要完成具體的事件處理方法,即預(yù)先定義的事件處理的動(dòng)作代碼。
③將監(jiān)聽(tīng)器實(shí)現(xiàn)類產(chǎn)生的監(jiān)聽(tīng)器對(duì)象與窗口組件進(jìn)行注冊(cè)/綁定。
(2)實(shí)線說(shuō)明:
①當(dāng)用戶有鼠標(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)類的對(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)類實(shí)現(xiàn)ActionListener接口,在actionPerformed方法中寫(xiě)入點(diǎn)擊按鈕的將要實(shí)現(xiàn)的動(dòng)作代碼。
(2)將該用戶自定義監(jiān)聽(tīng)器類的對(duì)象與按鈕組件進(jìn)行注冊(cè)(綁定)。
完成以上兩步操作后,當(dāng)用戶使用鼠標(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類中定義了一個(gè)用戶自定義監(jiān)聽(tīng)器的內(nèi)部類MyButtonListener,這是一種比較常用的程序結(jié)構(gòu),還可以使用下面兩種形式來(lái)完成事件處理。
1.?BookView1類自己實(shí)現(xiàn)ActionListener接口
程序結(jié)果:
程序結(jié)構(gòu)與上述程序運(yùn)行結(jié)果是一樣的,在此不再重復(fù)。
2.?BookView2類使用匿名監(jiān)聽(tīng)器類的方式
程序結(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è)事件子類與這些事件對(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)類
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流包裝課程設(shè)計(jì)
- 映山紅課程設(shè)計(jì)
- 幼兒照護(hù)職業(yè)課程設(shè)計(jì)
- 移動(dòng)編程技術(shù)課程設(shè)計(jì)
- 測(cè)控系統(tǒng)課程設(shè)計(jì)
- 橋梁課程設(shè)計(jì)的價(jià)值
- 河北微課程設(shè)計(jì)方案制作
- 托班擺碗筷課程設(shè)計(jì)
- 2025年度節(jié)能減排環(huán)保產(chǎn)品采購(gòu)與銷售合同3篇
- 2025版智慧城市建設(shè)采購(gòu)框架合同3篇
- 2025蛇年春節(jié)春聯(lián)對(duì)聯(lián)帶橫批(276副)
- 2024年時(shí)事政治試題【有答案】
- 中國(guó)PHM系統(tǒng)行業(yè)投資方向及市場(chǎng)空間預(yù)測(cè)報(bào)告(智研咨詢發(fā)布)
- 造價(jià)咨詢部組織架構(gòu)及基本工作流程
- 新媒體代運(yùn)營(yíng)協(xié)議合同書(shū)
- 2024質(zhì)量管理復(fù)習(xí)題
- 2025年中學(xué)德育工作計(jì)劃
- 2024年1月國(guó)家開(kāi)放大學(xué)法律事務(wù)??啤睹穹▽W(xué)(1)》期末紙質(zhì)考試試題及答案
- 《數(shù)字通信原理》習(xí)題答案(全)
- 安防監(jiān)控智能化售后服務(wù)方案
- 手術(shù)室年終述職
評(píng)論
0/150
提交評(píng)論