版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 等額本息還款方式民間借款協(xié)議樣本
- 2023年桂林市中醫(yī)醫(yī)院招聘考試真題
- 2024年跨境中轉(zhuǎn)貨物運(yùn)輸協(xié)議樣本
- 2024年企業(yè)協(xié)議管理與采購(gòu)法務(wù)精要
- 2024建筑工程施工責(zé)任協(xié)議模板
- 2024年度鋼筋綁扎勞務(wù)承攬協(xié)議
- 二期消防系統(tǒng)建設(shè)專(zhuān)項(xiàng)協(xié)議范本2024
- 2024消防設(shè)備維護(hù)協(xié)議范本
- 護(hù)理科室調(diào)查表
- 訴訟期間借款合同范本
- GB/T 42455.2-2024智慧城市建筑及居住區(qū)第2部分:智慧社區(qū)評(píng)價(jià)
- 二次回路接線(xiàn)圖中常見(jiàn)的文字符號(hào)
- 五十年的同學(xué)會(huì)配樂(lè)詩(shī)朗誦.
- 中國(guó)石油天然氣股份有限公司股權(quán)處置實(shí)施細(xì)則
- 高中化學(xué)趣味知識(shí)競(jìng)賽(課堂PPT)
- 三管塔筏板計(jì)算
- 柴油購(gòu)銷(xiāo)合同
- MD380總體技術(shù)方案重點(diǎn)講義
- 天車(chē)道軌施工方案
- 傳染病轉(zhuǎn)診單
- 手術(shù)室各級(jí)護(hù)士崗位任職資格及職責(zé)
評(píng)論
0/150
提交評(píng)論