




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
8.5Java的事件處理模型8.5.1Java的事件處理模型概述8.5.2常見(jiàn)事件的處理舉例8.5.3事件監(jiān)聽(tīng)器的掛接和適配器8.5.4GUI類(lèi)和事件監(jiān)聽(tīng)類(lèi)的關(guān)系1
8.5.1Java的事件處理模型概述在Java程序的運(yùn)行過(guò)程中,當(dāng)用戶通過(guò)程序的用戶界面進(jìn)行某個(gè)操作時(shí),便引發(fā)一個(gè)相應(yīng)的事件(Event)。Java中的事件,是一個(gè)數(shù)據(jù)對(duì)象,用來(lái)描述用戶所執(zhí)行的操作。Java定義了很多事件類(lèi),分別用于描述不同的用戶行為。面向?qū)ο蟮腁WT事件處理模型—委托模型:將事件委托給在控件上注冊(cè)的“事件接收器”接口或“事件適配器”類(lèi)進(jìn)行處理。2一、AWT事件處理的基本概念和流程1.事件源。即用戶在各種場(chǎng)合進(jìn)行的各項(xiàng)操作,如敲擊鍵盤(pán)或用鼠標(biāo)點(diǎn)擊某個(gè)組件等。2.事件對(duì)象。對(duì)于不同的事件源,Java虛擬機(jī)會(huì)產(chǎn)生相應(yīng)類(lèi)型的事件對(duì)象。Java自動(dòng)識(shí)別各種不同的事件對(duì)象的類(lèi)型并進(jìn)行分類(lèi)處理。3.事件處理(監(jiān)聽(tīng))器接口。各種類(lèi)型的事件均有對(duì)應(yīng)的事件處理器接口。該接口封裝了與其對(duì)應(yīng)類(lèi)型事件的各種處理方法,并建立了事件到相應(yīng)處理方法的自動(dòng)映射。3
8.5.1事件處理模型基于授權(quán)事件模型:當(dāng)事件來(lái)源對(duì)象S因用戶的操作(鼠標(biāo)或鍵盤(pán))系統(tǒng)會(huì)自動(dòng)觸發(fā)此事件類(lèi)對(duì)象E,并通知所授權(quán)的事件監(jiān)聽(tīng)者L(需事先調(diào)用來(lái)源對(duì)象的addXxxListener方法向L注冊(cè)),事件監(jiān)聽(tīng)者L中有處理各種事件的方法(事件處理者1~n)便會(huì)處理此事件E的各種狀況。SEL4事件處理方法實(shí)現(xiàn)事件監(jiān)聽(tīng)器接口法:1)首先給組件注冊(cè)監(jiān)聽(tīng)器,使用下列方法:addxxxListener(事件監(jiān)聽(tīng)器對(duì)象);2)確定了事件監(jiān)聽(tīng)器的類(lèi)型后,必須在程序中定義類(lèi)來(lái)實(shí)現(xiàn)這些接口,重寫(xiě)接口中的所有方法。1)addKeyListener(newCharType());
2)publicclassCharTypeimplementsKeyListener{publicvoidkeyPressed(KeyEvente){……}//大括號(hào)中為處理事件的代碼publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法體為空publicvoidkeyTyped(KeyEvente){}}
58.5.2常見(jiàn)事件的處理舉例窗口事件的處理一、行為事件的處理二、焦點(diǎn)事件的處理三、項(xiàng)目事件的處理四、鍵盤(pán)事件的處理五、鼠標(biāo)事件的處理六、文本事件的處理6窗口事件的處理產(chǎn)生條件:當(dāng)一個(gè)窗口被激活、撤消激活、打開(kāi)、關(guān)閉、圖標(biāo)化或撤消圖標(biāo)化時(shí)窗口事件的表示:1)從WindowEvent類(lèi)創(chuàng)建的對(duì)象表示窗口事件監(jiān)聽(tīng)類(lèi):窗口監(jiān)聽(tīng)器WindowListener2)表示:由實(shí)現(xiàn)了WindowListener接口的對(duì)象來(lái)表示窗口監(jiān)聽(tīng)器。3)必須實(shí)現(xiàn)的方法:WindowListener接口指定了7種必須實(shí)現(xiàn)的方法,分別對(duì)應(yīng)窗口的7種不同事件種類(lèi)。4)注冊(cè)一個(gè)窗口事件源,需要調(diào)用組件的addWindowListener方法。7窗口事件的處理windowOpened當(dāng)窗口打開(kāi)時(shí)windowClosing單擊窗口右上角關(guān)閉按鈕嘗試關(guān)閉窗口時(shí)windowIconified單擊窗口的最小化圖標(biāo),窗口最小化時(shí)執(zhí)行方法windowDeiconified單擊窗口的還原按鈕,窗口還原時(shí)執(zhí)行windowActivated當(dāng)窗口在一系列窗口之前,成為當(dāng)前窗口時(shí)執(zhí)行,當(dāng)打開(kāi)窗口、還原窗口或點(diǎn)擊某個(gè)窗口到前臺(tái)都會(huì)調(diào)用該方法。windowDeactivated當(dāng)某個(gè)窗口從前臺(tái)移走時(shí),例如圖標(biāo)化、關(guān)閉窗口或另外一個(gè)窗口被激活等,windowClosed當(dāng)窗口關(guān)閉之后,如單擊關(guān)閉按鈕或執(zhí)行了窗口的dispose方法后執(zhí)行8例程8-132)由實(shí)現(xiàn)了WindowListener接口的Frame子類(lèi)對(duì)象表示窗口監(jiān)聽(tīng)器1)從WindowEvent類(lèi)創(chuàng)建的對(duì)象表示窗口事件3)7種必須實(shí)現(xiàn)的方法4)注冊(cè)一個(gè)窗口事件源兩個(gè)小錯(cuò)誤9windowClosed方法的代碼是否被調(diào)用的訣竅注意,若在windowClosing方法中直接調(diào)用System.exit方法,將不會(huì)調(diào)用windowClosed方法,如果不在乎windowClosed方法中的代碼,可以這樣做。如果想要windowClosed方法被調(diào)用,則需要在windowClosing方法中執(zhí)行窗口的dispose方法,然后從windowClosed方法中調(diào)用System.exit方法。如上例示另外,窗口的關(guān)閉如果要通過(guò)合適的按鈕單擊來(lái)實(shí)現(xiàn)時(shí),調(diào)用窗口的dispose方法。System.exit方法是結(jié)束程序,也能夠關(guān)閉窗口。窗口事件的處理Window類(lèi)的dispose()方法:ReleasesallofthenativescreenresourcesusedbythisWindow,itssubcomponents,andallofitsownedchildren10一、行為事件的處理產(chǎn)生條件:按鈕被按下、單行文本框中的回車(chē)、列表框的某項(xiàng)被雙擊或一個(gè)菜單項(xiàng)被選中行為事件的表示:1)從ActionEvent類(lèi)生成一個(gè)對(duì)象監(jiān)聽(tīng)類(lèi):行為監(jiān)聽(tīng)器ActionListener2)表示:由實(shí)現(xiàn)了ActionListener接口的對(duì)象表示行為監(jiān)聽(tīng)器。3)必須實(shí)現(xiàn)的方法:acitonPerformed4)注冊(cè)一個(gè)行為事件源:需要調(diào)用組件的addActionListener方法。5)撤銷(xiāo)一個(gè)行為事件源:使用組件的removeActionListener方法11產(chǎn)生行為事件時(shí),用戶可以按住Alt、Ctrl、Meta或Shift等四個(gè)修改鍵,以便使同一個(gè)按鈕實(shí)現(xiàn)不同的事情處理。ActionEvent類(lèi)提供了getModifiers方法返回標(biāo)識(shí)所有按下的修改鍵的整數(shù)值,通過(guò)與ActionEvent類(lèi)成員常量ALT_MASK、CTRL_MASK、META_MASK和SHIFT_MASK進(jìn)行位與運(yùn)算,就可以在按鈕或菜單項(xiàng)的事件處理程序中根據(jù)結(jié)果是否非零判別是否按下了修改鍵。當(dāng)有多個(gè)組件掛接到同一個(gè)行為事件監(jiān)聽(tīng)器上時(shí),可以用全局標(biāo)識(shí)符來(lái)標(biāo)識(shí)按下的按鈕或選中的菜單項(xiàng),方法是,在組件創(chuàng)建時(shí),調(diào)用組件對(duì)象的setActionCommand方法給該組件分配一個(gè)標(biāo)識(shí)符,當(dāng)這個(gè)組件的行為事件發(fā)生時(shí)則通過(guò)調(diào)用ActionEvent對(duì)象的getAcitonCommand方法獲取這個(gè)標(biāo)識(shí)符。一、行為事件的處理12ac例程8-7效果:鼠標(biāo)放到三個(gè)按鈕上的形狀分別為指針,十字架和文本注意:Applet的運(yùn)行方式!需將編譯好的類(lèi)文件嵌入到一個(gè)網(wǎng)頁(yè)中聲音文件要放到與網(wǎng)頁(yè)文件的同一目錄下播放相應(yīng)的聲音文件(演示:如何看懂幫助)13二、焦點(diǎn)事件的處理產(chǎn)生條件:當(dāng)一個(gè)組件得到或失去焦點(diǎn)時(shí),發(fā)生焦點(diǎn)事件例如用戶在對(duì)話框中從一個(gè)組件移到另外一個(gè)組件進(jìn)行操作時(shí)這些組件只有一個(gè)能夠得到焦點(diǎn)焦點(diǎn)事件的表示:1)由從FocusEvent類(lèi)創(chuàng)建的對(duì)象來(lái)表示監(jiān)聽(tīng)類(lèi):焦點(diǎn)監(jiān)聽(tīng)器FocusListener2)表示:由實(shí)現(xiàn)了FocusListener接口的對(duì)象表示行為監(jiān)聽(tīng)器。3)必須實(shí)現(xiàn)的方法:兩個(gè)必須實(shí)現(xiàn)的方法,focusGained和focusLost
4)注冊(cè)一個(gè)行為事件源:需要調(diào)用組件的addFocusListener方法。14二、焦點(diǎn)事件的處理焦點(diǎn)的改變可以是暫時(shí)的也可以是永久的。當(dāng)一窗口出現(xiàn)在另一個(gè)窗口的前面時(shí),這個(gè)焦點(diǎn)改變是暫時(shí)的。當(dāng)鼠標(biāo)單擊文本域或使用Tab鍵切換到另一個(gè)組件時(shí),焦點(diǎn)改變是永久的。FocusEvent類(lèi)的isTemporary方法返回是否為暫時(shí)改變。當(dāng)?shù)谝粋€(gè)焦點(diǎn)事件發(fā)生時(shí),獲取焦點(diǎn)的組件會(huì)調(diào)用focusGained方法。通常是第一個(gè)加入容器的組件能夠首先獲得焦點(diǎn)。對(duì)于接下來(lái)的焦點(diǎn)事件,失去焦點(diǎn)的組件調(diào)用focusLost,然后獲取焦點(diǎn)的組件調(diào)用focusGained。15例程8-8如果輸入的不是數(shù)字,則焦點(diǎn)將被調(diào)回到numField168-8運(yùn)行結(jié)果輸入“111”,將鼠標(biāo)移到第二個(gè)框輸入“aaaaaa”,將鼠標(biāo)移到第二個(gè)框17三、項(xiàng)目事件的處理產(chǎn)生條件:當(dāng)用戶選擇一個(gè)單選按鈕、復(fù)選框、復(fù)選框菜單項(xiàng)或者選擇列表框、下拉列表框(選擇列表)中的項(xiàng)目時(shí),焦點(diǎn)事件的表示:1)從ItemEvent類(lèi)創(chuàng)建的對(duì)象表示項(xiàng)目事件監(jiān)聽(tīng)類(lèi):項(xiàng)目監(jiān)聽(tīng)器ItemListener2)表示:它們由實(shí)現(xiàn)了ItemListener接口的對(duì)象表示。3)必須實(shí)現(xiàn)的方法:ItemListener僅指定了一個(gè)必須實(shí)現(xiàn)的方法ItemStateChanged。4)注冊(cè)一個(gè)項(xiàng)目事件源:需要調(diào)用組件的addItemListener方法。18例程8-919四、鍵盤(pán)事件的處理產(chǎn)生條件:當(dāng)用戶按下或釋放一個(gè)鍵時(shí)鍵盤(pán)事件的表示:1)從KeyEvent類(lèi)創(chuàng)建的對(duì)象表示鍵盤(pán)事件。監(jiān)聽(tīng)類(lèi):鍵盤(pán)監(jiān)聽(tīng)器2)表示:它們由實(shí)現(xiàn)KeyListener界面的對(duì)象代表。3)必須實(shí)現(xiàn)的方法:對(duì)應(yīng)三種鍵盤(pán)事件,KeyListener指定了三個(gè)必須實(shí)現(xiàn)的方法:keyPressed、keyReleased、keyTyped。4)注冊(cè)一個(gè)鍵盤(pán)事件源:調(diào)用組件的addKeyListener方法。20例程8-10更正:首個(gè)字母小寫(xiě)21五、鼠標(biāo)事件的處理產(chǎn)生條件:當(dāng)用戶按下鼠標(biāo)、釋放鼠標(biāo)或移動(dòng)鼠標(biāo)指針時(shí)鼠標(biāo)事件的表示:1)從MouseEvent類(lèi)創(chuàng)建的對(duì)象表示鼠標(biāo)事件。監(jiān)聽(tīng)類(lèi):兩個(gè)鼠標(biāo)監(jiān)聽(tīng)器MouseListener和MouseMotionListener2)表示:鼠標(biāo)按鈕相關(guān)事件監(jiān)聽(tīng)器由實(shí)現(xiàn)MouseListener接口的對(duì)象表示,而鼠標(biāo)移動(dòng)相關(guān)事件監(jiān)聽(tīng)器則由實(shí)現(xiàn)MouseMotionListener接口的對(duì)象表示3)必須實(shí)現(xiàn)的方法:其中。MouseListener指定5個(gè)必須實(shí)現(xiàn)的方法,他們是MouseClicked、MouseEntered、MouseExited、MousePressed和MouseReleased。MouseMotionListener指定兩種必須實(shí)現(xiàn)的方法,MouseDragged和MouseMoved。4)注冊(cè)一個(gè)鼠標(biāo)事件源:調(diào)用相應(yīng)的addMouseListener和addMouseMotionListener方法。22更正:首個(gè)字母小寫(xiě)例程8-11加“e.”23六、文本事件的處理產(chǎn)生條件:
當(dāng)一個(gè)文本框或文本域的內(nèi)容發(fā)生改變時(shí),文本事件的表示:1)從TextEvent類(lèi)產(chǎn)生的對(duì)象可以表示文本事件。監(jiān)聽(tīng)類(lèi):文本監(jiān)聽(tīng)器TextListener2)表示:它們由實(shí)現(xiàn)TextListener接口的對(duì)象來(lái)表示。3)必須實(shí)現(xiàn)的方法:TextListener只指定了一個(gè)必須實(shí)現(xiàn)的方法textValueChanged。4)注冊(cè)一個(gè)文本事件源:必須調(diào)用組件的addTextListener方法。24例程8-12兩處小錯(cuò)誤運(yùn)行效果:文本框里的字母不能超過(guò)8個(gè)258.5.3事件監(jiān)聽(tīng)器的掛接和適配器1.
事件監(jiān)聽(tīng)器的掛接同一個(gè)組件可以加上多個(gè)事件監(jiān)聽(tīng)器,同一個(gè)事件監(jiān)聽(tīng)器也可以在同一組件上添加/刪除多次。26例程8-1427運(yùn)行結(jié)果點(diǎn)OK一次點(diǎn)cancel一次281.
適配器很多事件監(jiān)聽(tīng)器接口中定義了很多抽象方法,我的程序中可能只用到其中的一個(gè)或幾個(gè),但根據(jù)語(yǔ)法規(guī)則,實(shí)現(xiàn)接口時(shí)需要把其中定義的方法都要實(shí)現(xiàn),對(duì)程序中不用的方法也需要填進(jìn)空語(yǔ)句。例子:有象WindowListener接口,有7個(gè)方法,而很多程序中可能只用到其中的windowClosing方法,以便寫(xiě)上窗口右上角的關(guān)閉按鈕的關(guān)閉程序功能。這樣就使程序編寫(xiě)顯得非常麻煩。29為簡(jiǎn)化程序,Java中預(yù)定義了一些特殊類(lèi),這些類(lèi)已經(jīng)實(shí)現(xiàn)了相應(yīng)的接口,所有方法都寫(xiě)上了空語(yǔ)句。編寫(xiě)事件監(jiān)聽(tīng)器類(lèi)時(shí),便可通過(guò)繼承這些特殊的類(lèi)來(lái)達(dá)到實(shí)現(xiàn)相應(yīng)的事件監(jiān)聽(tīng)器接口的目的,同時(shí)又可以只選擇程序中需要的方法進(jìn)行重寫(xiě),非常方便。Java中將這些預(yù)定義的類(lèi)稱(chēng)為事件適配器類(lèi),
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 超市提成合同協(xié)議書(shū)
- 鄰居違建調(diào)解協(xié)議書(shū)
- 道路損毀修復(fù)協(xié)議書(shū)
- 高中宿舍承包協(xié)議書(shū)
- ufc比賽傷亡協(xié)議書(shū)
- 單位章程及聯(lián)營(yíng)協(xié)議書(shū)
- 衣柜閑置轉(zhuǎn)讓協(xié)議書(shū)
- 車(chē)位包租返租協(xié)議書(shū)
- 路人死亡賠償協(xié)議書(shū)
- 高中就業(yè)合同協(xié)議書(shū)
- DB4401-T 31-2019數(shù)字地圖測(cè)繪技術(shù)規(guī)程-(高清現(xiàn)行)
- 全國(guó)青少年電子信息智能與創(chuàng)新大賽(智能運(yùn)輸器)考試題庫(kù)
- SAP電池行業(yè)解決方案
- 冥王星的命運(yùn)課件
- 燃?xì)夤驹露劝踩a(chǎn)檢查表
- 行政執(zhí)法實(shí)務(wù)講課課件PPT
- DB43∕T 604-2010 日用炻瓷-行業(yè)標(biāo)準(zhǔn)
- 《品牌策劃與管理(第4版)》知識(shí)點(diǎn)與關(guān)鍵詞解釋
- 國(guó)家開(kāi)放大學(xué)《水利水電工程造價(jià)管理》形考任務(wù)1-4參考答案
- 司法局PPT模板
- 軸直線滑臺(tái)設(shè)計(jì)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論