Java程序設(shè)計基礎(chǔ)__第14章_事件處理_第1頁
Java程序設(shè)計基礎(chǔ)__第14章_事件處理_第2頁
Java程序設(shè)計基礎(chǔ)__第14章_事件處理_第3頁
Java程序設(shè)計基礎(chǔ)__第14章_事件處理_第4頁
Java程序設(shè)計基礎(chǔ)__第14章_事件處理_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第14章 事件處理,1,.,本章主要內(nèi)容,監(jiān)聽者接口與適配器類,2,事件及相應(yīng)的事件處理,.,14.1 委托事件模型,事件處理:為組件設(shè)計相應(yīng)的程序,使組件能夠響應(yīng)并處理用戶的操作。 Java 程序一旦構(gòu)建完GUI,就不再工作,而是等待用戶通過鼠標(biāo)、鍵盤給它通知(消息驅(qū)動),它再根據(jù)這個通知的內(nèi)容進行相應(yīng)的處理(事件驅(qū)動)。 通常一個鍵盤或鼠標(biāo)操作會引發(fā)一個系統(tǒng)預(yù)先定義好的事件,用戶只需編寫代碼,定義每個特定事件發(fā)生時程序應(yīng)做出何種響應(yīng)即可。,消息處理和事件驅(qū)動是面向?qū)ο缶幊碳夹g(shù)的主要特點。,3,.,14.1 委托事件處理,事件(event):用戶使用鼠標(biāo)或鍵盤對窗口中的組件進行交互時所發(fā)生的

2、事情。對這些事件做出響應(yīng)的程序,稱為事件處理程序(Event Handler)。 事件源(event source):能夠產(chǎn)生事件的對象。如按鈕、鼠標(biāo)、文本框、鍵盤等。 事件監(jiān)聽者(listener):監(jiān)聽者有專門的方法來處理事件,事件監(jiān)聽者是一個對事件源進行監(jiān)視的對象,當(dāng)事件源上發(fā)生事件時,事件監(jiān)聽者能夠監(jiān)聽到,并調(diào)用相應(yīng)的方法對發(fā)生的事件做出相應(yīng)的處理。,4,.,14.1 委托事件處理,事件處理程序:Java語言中包含了許多用來處理事件的接口和類。用于事件處理的方法就聲明在這些類或接口中。這些包含有事件處理方法的接口稱為監(jiān)聽者接口,包含有事件處理方法的類稱為適配器類。監(jiān)聽者負責(zé)處理事件源發(fā)

3、生的事件,為了處理事件源發(fā)生的事件,監(jiān)聽者會自動調(diào)用一個方法來處理事件。這些處理事件的方法就是事件處理程序。,5,.,14.1 委托事件處理,Java語言規(guī)定:為了讓監(jiān)聽者能對事件源發(fā)生的事件進行處理,創(chuàng)建該監(jiān)聽者對象的類必須聲明實現(xiàn)相應(yīng)的監(jiān)聽者接口或繼承相應(yīng)的適配類,即必須在類體中具體定義該接口中所有方法的方法體或覆蓋適配器類中的相應(yīng)方法,以供監(jiān)聽者自動調(diào)用相應(yīng)事件處理方法來完成對應(yīng)事件的任務(wù),這些處理事件的方法就是事件處理程序。,6,.,14.1 委托事件模型,委托事件模型:是將事件源(如命令按鈕)和對事件做出的具體處理(利用監(jiān)聽者實例來對事件進行具體的處理)分離開來。一般情況下,組件(事

4、件源)不處理自己的事件,而是將事件處理委托給外部的處理實體(監(jiān)聽者)。當(dāng)事件發(fā)生時,產(chǎn)生事件的對象即事件源,會把此“信息”轉(zhuǎn)給事件監(jiān)聽者處理的一種方式,而這里所指的“信息”事實上就是java.awt.event事件類庫里某個類所創(chuàng)建的對象,我們把它稱為“事件對象”(Event object)。事件對象表示事件的內(nèi)容,對象內(nèi)部封裝了一個對事件源eveutSource的引用和其他信息。,事件對象(java.awt.event),表示事件的內(nèi)容,內(nèi)部封裝了一個對事件源的引用等信息。,7,.,14.1 委托事件模型,總的來說,委托事件模型是由產(chǎn)生事件的對象(事件源)、事件對象以及事件監(jiān)聽者對象之間的關(guān)

5、系所組成。而其中的“事件監(jiān)聽者”就是用來處理事件的對象,也就是說,監(jiān)聽者對象會等待事件的發(fā)生,并在事件發(fā)生時收到通知。事件源會在事件產(chǎn)生時,將相關(guān)于該事件的信息封裝在一個對象中,稱之為“事件對象”,并將該對象傳遞給事件監(jiān)聽者,監(jiān)聽者就可以根據(jù)該“事件對象”內(nèi)的信息決定適當(dāng)?shù)奶幚矸绞?,即調(diào)用相應(yīng)的事件處理程序。,8,.,14.1 委托事件模型,例如,當(dāng)按鈕被鼠標(biāo)單擊時,會觸發(fā)一個“操作事件”(Action event),Java程序就會產(chǎn)生一個“事件對象”來表示這個事件,然后把這個“事件對象”傳遞給“事件監(jiān)聽者”,“事件監(jiān)聽者”再依據(jù)“事件對象”的種類把工作指派給事件處理者,即事件處理程序。在這

6、里按鈕就是一個事件源。 為了讓“事件源”(如按鈕)知道要把事件信息傳遞給哪一個“事件監(jiān)聽者”,事先必須把“事件監(jiān)聽者”向“事件源”注冊(register),這個操作也就是告知“事件源”要把事件信息傳遞給它。圖13.1說明了“委托事件模型”的工作原理。,9,.,14.1 委托事件模型,委托事件模型的工作原理:,10,.,14.1 委托事件模型,讓包含“事件源”的對象來擔(dān)任監(jiān)聽者 如何編寫事件處理程序?見教材中例13.1。 為組件增加事件監(jiān)聽者的方法:由于每一個事件類型都有一個相應(yīng)的監(jiān)聽者接口,通常名為XXXListener,其中XXX代表它所處理的事件類型。在定義類時要實現(xiàn)該接口。 監(jiān)聽者有專門

7、的方法用于處理事件,具體在哪個組件上發(fā)生事件后由哪個監(jiān)聽者處理,必須事前用“組件名.addXXXLister( )”進行注冊。,11,事件源對象.addXXXLister(監(jiān)聽者對象),.,14.1 委托事件模型,定義內(nèi)部類來擔(dān)任監(jiān)聽者 通常將實現(xiàn)接口的類定義在主類里,使之成為它的內(nèi)部類(內(nèi)部類可以訪問外部類的所有成員) 見教材例14.2。,12,.,13,.,14.1 委托事件模型,使用匿名內(nèi)部類來擔(dān)任監(jiān)聽者 使用匿名內(nèi)部類充當(dāng)監(jiān)聽者這種方式,使程序看起來比較清楚明了。 見教材例14.3。,14,.,15,.,14.2 Java語言的事件類,java.awt.event 包和javax.sw

8、ing.event包中定義了許多事件類用于處理各種用戶操作所產(chǎn)生的事件。 事件類的繼承關(guān)系見教材圖14.3。,16,.,14.2 Java語言的事件類,對于每一個事件類,幾乎都有相應(yīng)的事件監(jiān)聽者。監(jiān)聽者接口多數(shù)都是繼承自java.util.EventListener接口。圖14.4列出了事件監(jiān)聽者接口之間的繼承關(guān)系。 事件類、事件監(jiān)聽者接口和監(jiān)聽者接口中提供的方法關(guān)系列表見教材中表14.1。,17,.,14.2 Java語言的事件類,每當(dāng)在事件源上發(fā)生一個操作時,就會產(chǎn)生相應(yīng)的事件對象。 事件源與其產(chǎn)生的事件對象的對應(yīng)關(guān)系見教材表14.2。,18,.,14.2 Java的事件處理類,Java語

9、言中處理事件的具體方法: 確認(rèn)觸發(fā)的事件,取得事件類的名字,如ActionEvent,去掉其中的“Event”字樣。在剩下的部分加入“Listener”,這就是在類里需要實現(xiàn)的事件監(jiān)聽者接口。 實現(xiàn)上述的接口,針對想要捕獲的事件編寫方法代碼。如要捕獲單擊按鈕事件,就要為ActionListener接口里的actionPerformed()方法編寫代碼。 為事件監(jiān)聽者創(chuàng)建一個對象,讓自己的組件和方法完成對它的注冊,方法是在監(jiān)聽者接口的名字里加入一個前綴“add”,如addActionListener(),19,.,14.3 適配器類,為某些監(jiān)聽者接口提供了適配器類XXXAdapter,當(dāng)需要對某

10、種事件進行處理時,只需讓事件處理 類繼承事件所對應(yīng)的適配器類,就可以只覆蓋本 次操作用到的事件處理方法即可。 當(dāng)一個類需要處理多種事件時,通過繼承適配器的方法就不可行了,但可以基于適配器類,用內(nèi)部類的方法處理。 若想用作事件監(jiān)聽者的類已經(jīng)繼承了別的類,就不能再繼承適配器類,只能去實現(xiàn)監(jiān)聽者接口。 監(jiān)聽者接口與對應(yīng)的適配器類見教材表14.3,.20,.,14.4 命令按鈕及相應(yīng)的事件處理,命令按鈕所觸發(fā)的事件是動作事件。動作事件類ActionEvent,也稱為操作事件類。 操作事件類的主要數(shù)據(jù)成員和成員方法見教材表14.4、14.5 見教材例14.4,21,.,22,.,14.5復(fù)選框、單選按鈕

11、及相應(yīng)的事件處理,JRadioButton、JCheckBox與JToggleButton除了與JButton一樣都會觸發(fā)ActionEvent操作事件外,JRadioButton、JCheckBox以及JToggleButton還會觸發(fā)ItemEvent事件。 表14.6給出了事件類ItemEvent的主要成員變量,表14.7給出的是ItemEvent類的常用方法 見教材例14.5,23,.,24,.,14.6 文本組件及相應(yīng)的事件處理,文本組件所觸發(fā)的事件主要有動作事件ActionEvent和文本變化事件CaretEvent 。 見教材例14.6,25,.,26,.,14.7 窗口組件及窗

12、口事件處理,Window類的任何子類都可能觸發(fā)下列的窗口事件:打開窗口、正在關(guān)閉窗口、關(guān)閉窗口、激活窗口、變成非活動窗口、最小化窗口和還原窗口。 Window類常用方法見教材表14.8 窗口事件的監(jiān)聽者是WindowListener接口,具體方法見教材表14.9 見教材例14.7,27,.,28,.,14.8 對話框設(shè)計及相應(yīng)的事件處理,JDialog是Swing中提供的用來實現(xiàn)自定義的對話框, JDialog類也屬于頂層容器,其默認(rèn)的布局管理器為BorderLayout。 JDialog有模式和非模式兩種方式。 通過使用JOptionPane類創(chuàng)建以下四種標(biāo)準(zhǔn)對話框 教材中的表14.13給出

13、了創(chuàng)建標(biāo)準(zhǔn)對話框的方法。 應(yīng)用例子見教材例14.13。,29,.,30,.,14.9 按鍵事件類KeyEvent,當(dāng)用戶在鍵盤上輸入字符時便會觸發(fā)此類事件。表14.14列出了按鍵事件類KeyEvent的主要方法,表14.15列出了字符的鍵碼值。 用按鍵事件接口KeyListener處理KeyEvent事件必須以類實現(xiàn)KeyListener接口,該接口里聲明了3個方法,見教材表14.16。 用按鍵適配器類KeyAdapter處理KeyEvent事件 見教材例14.9,31,.,32,.,14.10 鼠標(biāo)事件類MouseEvent,用鼠標(biāo)單擊事件源、鼠標(biāo)指針進入或離開事件 源,或移動、拖動鼠標(biāo)等操

14、作,均會觸發(fā)鼠標(biāo)事件。 該類常用方法見教材表14.17 處理鼠標(biāo)事件MouseEvent的監(jiān)聽者是實現(xiàn)MouseListener接口或MouseMotionListener接口: 必須實現(xiàn)教材表14.18中5個用于處理不同鼠標(biāo)事件的方法。(注意: mousePressed 、mouseClicked、和mouseReleased 觸發(fā)順序。),33,主要用于處理多于一個鼠標(biāo)事件的情況。,.,14.10 鼠標(biāo)事件類MouseEvent,監(jiān)聽者也可以是繼承MouseAdapter類或MouseMotionAdapter類: 必須實現(xiàn)教材中表14.19兩個用于處理鼠標(biāo)移動與拖動事件的方法。 見P教材

15、中例14.10,34,.,35,.,14.11 列表框及相應(yīng)的事件處理,列表框組件JList中顯示出多個選項供用戶選擇,用戶可以在列表框中選擇一項或多個選項。 使列表框具有滾動功能,可以通過創(chuàng)建一個滾動窗格JScrollPane的對象,然后將列表框添加到其中即可。 列表框中可選項的序號是從0開始的。 JList類的構(gòu)造方法和常用方法見教材表14.20、14.21。應(yīng)用 見教材14.11。,36,.,37,.,14.12 組合框及相應(yīng)的處理,組合框(combo box)也稱為下拉列表框(drop-down list),單擊下拉列表框右邊的向下箭頭,然后從伸展開的選項框中選擇一個選項即可。 JCo

16、mboBox的構(gòu)造方法及常用方法見教材表14.22和14.23。 在組合框中進行選擇某個選項的操作時會觸發(fā)ItemEvent 事件,然后即將事件處理的程序代碼編寫在itemStateChanged()方法中。另外,當(dāng)組合框處于可編輯狀態(tài)時,也可以觸發(fā)ActionEvent事件。應(yīng)用見教材例14.12,38,.,39,.,14.13 菜單設(shè)計,Java語言菜單分類:窗口菜單、彈出式菜單(快捷菜單)。 菜單欄類的繼承關(guān)系如教材圖14.14所示。 在菜單程序設(shè)計中通常會用到五種菜單對象: JMenuBar Jmenu JMenuItem JCheckBoxMenuItem JRadioButtonM

17、enuItem。,40,.,14.13 菜單設(shè)計,窗口菜單: 窗口菜單是相對于窗口的,它出現(xiàn)在窗口標(biāo)題欄的下面,總是與窗口同時出現(xiàn)。也不能被布局管理器所控制。,41,.,14.13 菜單設(shè)計,窗口菜單: 菜單在菜單中除了上面介紹的菜單項外,還有一種帶復(fù)選框的菜單項,它的前面有一個復(fù)選標(biāo)記:“”表示選中,“”表示未選中。這種菜單項的功能是由JCheckBoxMenuItem類所實現(xiàn)的。 JCheckBoxMenuItem類的構(gòu)造方法及常用方法見教材表14.30、14.31。,42,.,14.13 菜單設(shè)計,菜單的創(chuàng)建: 要創(chuàng)建一個完整的菜單,首先必須分別創(chuàng)建JMenuBar、JMenu和JMen

18、uItem、JCheckBoxMenuItem或JRadioButtonMenuItem對象;然后用add()方法把JMenu對象添加到JMenuBar對象中;再把JMenuItem、JCheckBoxMenuItem或JRadioButtonMenuItem對象添加到JMenu對象中。 最后進行事件處理。為相應(yīng)的菜單項注冊對應(yīng)的事件監(jiān)聽者。,43,.,14.13 菜單設(shè)計,菜單的快捷鍵:快捷鍵是一個字母,定義好了之后,可以按Ctrl鍵和該字母鍵就可以選擇菜單中對應(yīng)的菜單項。,44,.,14.13 菜單設(shè)計,彈出式菜單: 當(dāng)在某個組件上單擊鼠標(biāo)右鍵時,會彈出一個菜單供選擇。 是一種獨立的菜單,它附著在某一組件或容器上。程序運行時,一般情況下不顯示,只有當(dāng)用戶在附著有彈出式菜單的組件上進行某項操作時才顯示,Java語言用JPopupMenu類實現(xiàn)彈出式菜單的功能。 JPopupMenu類的構(gòu)造方法及常用方法見教材表14.32、14.33.,45,.,14.14 工具欄設(shè)計,Swing提供了JToolBar類用于存放工具欄組件的容器。 由于工具欄中添加的多為命令按鈕,所以,其事件處理也是動作事件ActionEvent JToolBar類的構(gòu)造方法及常用方法見教材表14.34、14.35。 應(yīng)用見教材例14.15,46,.,47,.,14.15 滑動條設(shè)計及相應(yīng)的

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論