Java的事件處理模型_第1頁
Java的事件處理模型_第2頁
Java的事件處理模型_第3頁
Java的事件處理模型_第4頁
Java的事件處理模型_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

8.5Java的事件處理模型8.5.1Java的事件處理模型概述8.5.2常見事件的處理舉例8.5.3事件監(jiān)聽器的掛接和適配器8.5.4GUI類和事件監(jiān)聽類的關(guān)系1

8.5.1Java的事件處理模型概述在Java程序的運(yùn)行過程中,當(dāng)用戶通過程序的用戶界面進(jìn)行某個操作時,便引發(fā)一個相應(yīng)的事件(Event)。Java中的事件,是一個數(shù)據(jù)對象,用來描述用戶所執(zhí)行的操作。Java定義了很多事件類,分別用于描述不同的用戶行為。面向?qū)ο蟮腁WT事件處理模型—委托模型:將事件委托給在控件上注冊的“事件接收器”接口或“事件適配器”類進(jìn)行處理。2一、AWT事件處理的基本概念和流程1.事件源。即用戶在各種場合進(jìn)行的各項操作,如敲擊鍵盤或用鼠標(biāo)點(diǎn)擊某個組件等。2.事件對象。對于不同的事件源,Java虛擬機(jī)會產(chǎn)生相應(yīng)類型的事件對象。Java自動識別各種不同的事件對象的類型并進(jìn)行分類處理。3.事件處理(監(jiān)聽)器接口。各種類型的事件均有對應(yīng)的事件處理器接口。該接口封裝了與其對應(yīng)類型事件的各種處理方法,并建立了事件到相應(yīng)處理方法的自動映射。3

8.5.1事件處理模型基于授權(quán)事件模型:當(dāng)事件來源對象S因用戶的操作(鼠標(biāo)或鍵盤)系統(tǒng)會自動觸發(fā)此事件類對象E,并通知所授權(quán)的事件監(jiān)聽者L(需事先調(diào)用來源對象的addXxxListener方法向L注冊),事件監(jiān)聽者L中有處理各種事件的方法(事件處理者1~n)便會處理此事件E的各種狀況。SEL4事件處理方法實現(xiàn)事件監(jiān)聽器接口法:1)首先給組件注冊監(jiān)聽器,使用下列方法:addxxxListener(事件監(jiān)聽器對象);2)確定了事件監(jiān)聽器的類型后,必須在程序中定義類來實現(xiàn)這些接口,重寫接口中的所有方法。1)addKeyListener(newCharType());

2)publicclassCharTypeimplementsKeyListener{publicvoidkeyPressed(KeyEvente){……}//大括號中為處理事件的代碼publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法體為空publicvoidkeyTyped(KeyEvente){}}

58.5.2常見事件的處理舉例窗口事件的處理一、行為事件的處理二、焦點(diǎn)事件的處理三、項目事件的處理四、鍵盤事件的處理五、鼠標(biāo)事件的處理六、文本事件的處理6窗口事件的處理產(chǎn)生條件:當(dāng)一個窗口被激活、撤消激活、打開、關(guān)閉、圖標(biāo)化或撤消圖標(biāo)化時窗口事件的表示:1)從WindowEvent類創(chuàng)建的對象表示窗口事件監(jiān)聽類:窗口監(jiān)聽器WindowListener2)表示:由實現(xiàn)了WindowListener接口的對象來表示窗口監(jiān)聽器。3)必須實現(xiàn)的方法:WindowListener接口指定了7種必須實現(xiàn)的方法,分別對應(yīng)窗口的7種不同事件種類。4)注冊一個窗口事件源,需要調(diào)用組件的addWindowListener方法。7窗口事件的處理windowOpened當(dāng)窗口打開時windowClosing單擊窗口右上角關(guān)閉按鈕嘗試關(guān)閉窗口時windowIconified單擊窗口的最小化圖標(biāo),窗口最小化時執(zhí)行方法windowDeiconified單擊窗口的還原按鈕,窗口還原時執(zhí)行windowActivated當(dāng)窗口在一系列窗口之前,成為當(dāng)前窗口時執(zhí)行,當(dāng)打開窗口、還原窗口或點(diǎn)擊某個窗口到前臺都會調(diào)用該方法。windowDeactivated當(dāng)某個窗口從前臺移走時,例如圖標(biāo)化、關(guān)閉窗口或另外一個窗口被激活等,windowClosed當(dāng)窗口關(guān)閉之后,如單擊關(guān)閉按鈕或執(zhí)行了窗口的dispose方法后執(zhí)行8例程8-132)由實現(xiàn)了WindowListener接口的Frame子類對象表示窗口監(jiān)聽器1)從WindowEvent類創(chuàng)建的對象表示窗口事件3)7種必須實現(xiàn)的方法4)注冊一個窗口事件源兩個小錯誤9windowClosed方法的代碼是否被調(diào)用的訣竅注意,若在windowClosing方法中直接調(diào)用System.exit方法,將不會調(diào)用windowClosed方法,如果不在乎windowClosed方法中的代碼,可以這樣做。如果想要windowClosed方法被調(diào)用,則需要在windowClosing方法中執(zhí)行窗口的dispose方法,然后從windowClosed方法中調(diào)用System.exit方法。如上例示另外,窗口的關(guān)閉如果要通過合適的按鈕單擊來實現(xiàn)時,調(diào)用窗口的dispose方法。System.exit方法是結(jié)束程序,也能夠關(guān)閉窗口。窗口事件的處理Window類的dispose()方法:ReleasesallofthenativescreenresourcesusedbythisWindow,itssubcomponents,andallofitsownedchildren10一、行為事件的處理產(chǎn)生條件:按鈕被按下、單行文本框中的回車、列表框的某項被雙擊或一個菜單項被選中行為事件的表示:1)從ActionEvent類生成一個對象監(jiān)聽類:行為監(jiān)聽器ActionListener2)表示:由實現(xiàn)了ActionListener接口的對象表示行為監(jiān)聽器。3)必須實現(xiàn)的方法:acitonPerformed4)注冊一個行為事件源:需要調(diào)用組件的addActionListener方法。5)撤銷一個行為事件源:使用組件的removeActionListener方法11產(chǎn)生行為事件時,用戶可以按住Alt、Ctrl、Meta或Shift等四個修改鍵,以便使同一個按鈕實現(xiàn)不同的事情處理。ActionEvent類提供了getModifiers方法返回標(biāo)識所有按下的修改鍵的整數(shù)值,通過與ActionEvent類成員常量ALT_MASK、CTRL_MASK、META_MASK和SHIFT_MASK進(jìn)行位與運(yùn)算,就可以在按鈕或菜單項的事件處理程序中根據(jù)結(jié)果是否非零判別是否按下了修改鍵。當(dāng)有多個組件掛接到同一個行為事件監(jiān)聽器上時,可以用全局標(biāo)識符來標(biāo)識按下的按鈕或選中的菜單項,方法是,在組件創(chuàng)建時,調(diào)用組件對象的setActionCommand方法給該組件分配一個標(biāo)識符,當(dāng)這個組件的行為事件發(fā)生時則通過調(diào)用ActionEvent對象的getAcitonCommand方法獲取這個標(biāo)識符。一、行為事件的處理12ac例程8-7效果:鼠標(biāo)放到三個按鈕上的形狀分別為指針,十字架和文本注意:Applet的運(yùn)行方式!需將編譯好的類文件嵌入到一個網(wǎng)頁中聲音文件要放到與網(wǎng)頁文件的同一目錄下播放相應(yīng)的聲音文件(演示:如何看懂幫助)13二、焦點(diǎn)事件的處理產(chǎn)生條件:當(dāng)一個組件得到或失去焦點(diǎn)時,發(fā)生焦點(diǎn)事件例如用戶在對話框中從一個組件移到另外一個組件進(jìn)行操作時這些組件只有一個能夠得到焦點(diǎn)焦點(diǎn)事件的表示:1)由從FocusEvent類創(chuàng)建的對象來表示監(jiān)聽類:焦點(diǎn)監(jiān)聽器FocusListener2)表示:由實現(xiàn)了FocusListener接口的對象表示行為監(jiān)聽器。3)必須實現(xiàn)的方法:兩個必須實現(xiàn)的方法,focusGained和focusLost

4)注冊一個行為事件源:需要調(diào)用組件的addFocusListener方法。14二、焦點(diǎn)事件的處理焦點(diǎn)的改變可以是暫時的也可以是永久的。當(dāng)一窗口出現(xiàn)在另一個窗口的前面時,這個焦點(diǎn)改變是暫時的。當(dāng)鼠標(biāo)單擊文本域或使用Tab鍵切換到另一個組件時,焦點(diǎn)改變是永久的。FocusEvent類的isTemporary方法返回是否為暫時改變。當(dāng)?shù)谝粋€焦點(diǎn)事件發(fā)生時,獲取焦點(diǎn)的組件會調(diào)用focusGained方法。通常是第一個加入容器的組件能夠首先獲得焦點(diǎn)。對于接下來的焦點(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)移到第二個框輸入“aaaaaa”,將鼠標(biāo)移到第二個框17三、項目事件的處理產(chǎn)生條件:當(dāng)用戶選擇一個單選按鈕、復(fù)選框、復(fù)選框菜單項或者選擇列表框、下拉列表框(選擇列表)中的項目時,焦點(diǎn)事件的表示:1)從ItemEvent類創(chuàng)建的對象表示項目事件監(jiān)聽類:項目監(jiān)聽器ItemListener2)表示:它們由實現(xiàn)了ItemListener接口的對象表示。3)必須實現(xiàn)的方法:ItemListener僅指定了一個必須實現(xiàn)的方法ItemStateChanged。4)注冊一個項目事件源:需要調(diào)用組件的addItemListener方法。18例程8-919四、鍵盤事件的處理產(chǎn)生條件:當(dāng)用戶按下或釋放一個鍵時鍵盤事件的表示:1)從KeyEvent類創(chuàng)建的對象表示鍵盤事件。監(jiān)聽類:鍵盤監(jiān)聽器2)表示:它們由實現(xiàn)KeyListener界面的對象代表。3)必須實現(xiàn)的方法:對應(yīng)三種鍵盤事件,KeyListener指定了三個必須實現(xiàn)的方法:keyPressed、keyReleased、keyTyped。4)注冊一個鍵盤事件源:調(diào)用組件的addKeyListener方法。20例程8-10更正:首個字母小寫21五、鼠標(biāo)事件的處理產(chǎn)生條件:當(dāng)用戶按下鼠標(biāo)、釋放鼠標(biāo)或移動鼠標(biāo)指針時鼠標(biāo)事件的表示:1)從MouseEvent類創(chuàng)建的對象表示鼠標(biāo)事件。監(jiān)聽類:兩個鼠標(biāo)監(jiān)聽器MouseListener和MouseMotionListener2)表示:鼠標(biāo)按鈕相關(guān)事件監(jiān)聽器由實現(xiàn)MouseListener接口的對象表示,而鼠標(biāo)移動相關(guān)事件監(jiān)聽器則由實現(xiàn)MouseMotionListener接口的對象表示3)必須實現(xiàn)的方法:其中。MouseListener指定5個必須實現(xiàn)的方法,他們是MouseClicked、MouseEntered、MouseExited、MousePressed和MouseReleased。MouseMotionListener指定兩種必須實現(xiàn)的方法,MouseDragged和MouseMoved。4)注冊一個鼠標(biāo)事件源:調(diào)用相應(yīng)的addMouseListener和addMouseMotionListener方法。22更正:首個字母小寫例程8-11加“e.”23六、文本事件的處理產(chǎn)生條件:

當(dāng)一個文本框或文本域的內(nèi)容發(fā)生改變時,文本事件的表示:1)從TextEvent類產(chǎn)生的對象可以表示文本事件。監(jiān)聽類:文本監(jiān)聽器TextListener2)表示:它們由實現(xiàn)TextListener接口的對象來表示。3)必須實現(xiàn)的方法:TextListener只指定了一個必須實現(xiàn)的方法textValueChanged。4)注冊一個文本事件源:必須調(diào)用組件的addTextListener方法。24例程8-12兩處小錯誤運(yùn)行效果:文本框里的字母不能超過8個258.5.3事件監(jiān)聽器的掛接和適配器1.

事件監(jiān)聽器的掛接同一個組件可以加上多個事件監(jiān)聽器,同一個事件監(jiān)聽器也可以在同一組件上添加/刪除多次。26例程8-1427運(yùn)行結(jié)果點(diǎn)OK一次點(diǎn)cancel一次281.

適配器很多事件監(jiān)聽器接口中定義了很多抽象方法,我的程序中可能只用到其中的一個或幾個,但根據(jù)語法規(guī)則,實現(xiàn)接口時需要把其中定義的方法都要實現(xiàn),對程序中不用的方法也需要填進(jìn)空語句。例子:有象WindowListener接口,有7個方法,而很多程序中可能只用到其中的windowClosing方法,以便寫上窗口右上角的關(guān)閉按鈕的關(guān)閉程序功能。這樣就使程序編寫顯得非常麻煩。29為簡化程序,Java中預(yù)定義了一些特殊類,這些類已經(jīng)實現(xiàn)了相應(yīng)的接口,所有方法都寫上了空語句。編寫事件監(jiān)聽器類時,便可通過繼承這些特殊的類來達(dá)到實現(xiàn)相應(yīng)的事件監(jiān)聽器接口的目的,同時又可以只選擇程序中需要的方法進(jìn)行重寫,非常方便。Java中將這些預(yù)定義的類稱為事件適配器類,

溫馨提示

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

最新文檔

評論

0/150

提交評論