版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1主要涉及3類對(duì)象。(1)Event(事件):用戶使用鼠標(biāo)或鍵盤(pán)對(duì)窗口中的組件進(jìn)行交互發(fā)生的一個(gè)操作。例如,單擊按鈕等。(2)EventSource(事件源):能夠產(chǎn)生事件的對(duì)象。如按鈕、鼠標(biāo)、文本框或鍵盤(pán)等。(3)Eventlistener(事件監(jiān)聽(tīng)者或處理者)包含對(duì)事件進(jìn)行處理方法的類。事件監(jiān)聽(tīng)器A事件監(jiān)聽(tīng)器B事件對(duì)象事件對(duì)象事件源(例如:按鈕)12.5事件處理模型12.5事件處理模型12.5.1事件處理機(jī)制事件處理機(jī)制專門(mén)用于響應(yīng)用戶的操作,比如,想要響應(yīng)用戶的點(diǎn)擊鼠標(biāo)、按下鍵盤(pán)等操作,就需要使用AWT的事件處理機(jī)制事件對(duì)象(Event):封裝了GUI組件上發(fā)生的特定事件(通常就是用戶的一次操作)。事件源(組件):事件發(fā)生的場(chǎng)所,通常就是產(chǎn)生事件的組件監(jiān)聽(tīng)器(Listener):負(fù)責(zé)監(jiān)聽(tīng)事件源上發(fā)生的事件,并對(duì)各種事件做出響應(yīng)處理的對(duì)象(對(duì)象中包含事件處理器)事件處理器:監(jiān)聽(tīng)器對(duì)象對(duì)接收的事件對(duì)象進(jìn)行相應(yīng)處理的方法3!用戶交互事件如:?jiǎn)螕羰髽?biāo)如:按下/釋放鼠標(biāo)按鈕對(duì)象狀態(tài)改變調(diào)用事件處理確定發(fā)生的事件的類型確定生成的事件的組件編寫(xiě)合適的代碼處理事件事件作用于對(duì)象。對(duì)象識(shí)別事件并做出響應(yīng),不同的對(duì)象能識(shí)別的事件不全相同??梢葬槍?duì)相應(yīng)的事件編寫(xiě)相應(yīng)的代碼,在事件發(fā)生時(shí),程序執(zhí)行事件里的代碼。4
源對(duì)象監(jiān)聽(tīng)器事件
傳播事件的實(shí)例方法傳遞途徑代理事件模型Swing中的GUI組件適配器對(duì)象12.5事件處理模型12.5.1事件處理機(jī)制12.5事件處理模型12.5.2事件適配器例程9-3實(shí)現(xiàn)了和例程9-2相同的功能。定義的MyWindowAdapter類繼承了適配器類WindowAdapter,由于實(shí)現(xiàn)的功能是關(guān)閉窗口,因此只需要對(duì)windowClosing()方法進(jìn)行重寫(xiě)即可。需要注意的是,幾乎所有的監(jiān)聽(tīng)器接口都有對(duì)應(yīng)的適配器類,通過(guò)繼承適配器類來(lái)實(shí)現(xiàn)監(jiān)聽(tīng)器接口時(shí),需要處理哪種事件,直接重寫(xiě)該事件對(duì)應(yīng)的方法即可。12.5事件處理模型12.5.3用匿名內(nèi)部類實(shí)現(xiàn)事件處理12.5事件處理模型窗體事件WindowEvent用于表示這些窗體事件,在應(yīng)用程序中,當(dāng)對(duì)窗體事件進(jìn)行處理時(shí),首先需要定義一個(gè)類實(shí)現(xiàn)WindowListener接口作為窗體監(jiān)聽(tīng)器,然后通過(guò)addWindowListener()方法將窗體對(duì)象與窗體監(jiān)聽(tīng)器綁定12.5事件處理模型鼠標(biāo)事件MouseEvent類用于表示鼠標(biāo)事件,幾乎所有的組件都可以產(chǎn)生鼠標(biāo)事件,鼠標(biāo)事件包括鼠標(biāo)按下、鼠標(biāo)松開(kāi)、鼠標(biāo)單擊等。對(duì)鼠標(biāo)事件的處理可通過(guò)實(shí)現(xiàn)MouseListener接口或者繼承適配器MouseAdapter類,然后調(diào)用addMouseListener()方法將監(jiān)聽(tīng)器綁定到事件源對(duì)象12.5事件處理模型鍵盤(pán)事件鍵盤(pán)操作也是最常用的用戶交互方式,例如鍵盤(pán)按下、釋放等,這些操作被定義為鍵盤(pán)事件KeyEvent類表示鍵盤(pán)事件,處理KeyEvent事件的監(jiān)聽(tīng)器對(duì)象需要實(shí)現(xiàn)KeyListener接口或者繼承KeyAdapter類。12.5事件處理模型動(dòng)作事件在Java中,動(dòng)作事件用ActionEvent類表示,處理ActionEvent事件的監(jiān)聽(tīng)器對(duì)象需要實(shí)現(xiàn)ActionListener接口,但監(jiān)聽(tīng)器對(duì)象在監(jiān)聽(tīng)動(dòng)作時(shí),不會(huì)像鼠標(biāo)事件一樣處理鼠標(biāo)個(gè)別的移動(dòng)和單擊的細(xì)節(jié),而是去處理“按鈕按下”這樣“有意義”的事件。12【例9-7】在一個(gè)窗口中擺放5個(gè)組件,3個(gè)標(biāo)簽和2個(gè)文本框。當(dāng)文本框中信息更改后,將文本框中信息顯示在第3個(gè)標(biāo)簽中,同時(shí)設(shè)置其背景色為黃色。
演示:Event_Exam.java12.5事件處理模型1312.5.4事件處理類java.util.EventObject類是所有事件對(duì)象的基礎(chǔ)父類,所有事件都是由它派生出來(lái)的。Swing的相關(guān)事件繼承于java.awt.SwingEvent類Swing事件分為兩大類:低級(jí)事件高級(jí)事件1412.5.4事件處理類低級(jí)事件:指基于組件和容器的事件,當(dāng)一個(gè)組件上發(fā)生事件,如鼠標(biāo)的進(jìn)入、點(diǎn)擊、拖放等,或組件的窗口開(kāi)關(guān)等時(shí),觸發(fā)了組件事件。(1)ComponentEvent組件事件:組件尺寸的變化、移動(dòng)。(2)ContainerEvent容器事件:組件增加、移動(dòng)。(3)WindowEvent窗口事件:包括用戶點(diǎn)擊了關(guān)閉按鈕,窗口得到與失去焦點(diǎn),窗口最小化等。(4)FocusEvent焦點(diǎn)事件:焦點(diǎn)的獲得和丟失。(5)KeyEvent鍵盤(pán)事件:鍵按下、釋放。(6)MouseEvent鼠標(biāo)事件:包括鼠標(biāo)按下,鼠標(biāo)釋放,鼠標(biāo)點(diǎn)擊等。1512.5.4事件處理類高級(jí)事件:基于語(yǔ)義的事件,它可以不和特定的動(dòng)作相關(guān)聯(lián),而依賴于觸發(fā)此事件的類。比如,在JTextField中按Enter鍵會(huì)觸發(fā)ActionEvent事件,滑動(dòng)滾動(dòng)條會(huì)觸發(fā)AdjustmentEvent事件,選中項(xiàng)目列表的某一條就會(huì)觸發(fā)ItemEvent事件。(1)ActionEvent動(dòng)作事件:對(duì)應(yīng)一個(gè)動(dòng)作事件,它不是代表一個(gè)具體的動(dòng)作,而是一種語(yǔ)義。如按鈕按下,JTextField中按Enter鍵。(2)AdjustmentEvent調(diào)節(jié)事件:在滾動(dòng)條上移動(dòng)滑塊以調(diào)節(jié)數(shù)值。(3)ItemEvent項(xiàng)目事件:選擇項(xiàng)目,不選擇“項(xiàng)目改變”。(4)TextEvent文本事件:文本對(duì)象改變。1612.5.4事件處理類事件監(jiān)聽(tīng)接口:一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,接口中已定義的方法必須一一實(shí)現(xiàn),如果對(duì)某事件不感興趣,也要用空的方法體代替。適配器類(Adapter):為一些Listener接口提供了適配器,可通過(guò)繼承事件所對(duì)應(yīng)的Adapter類,重寫(xiě)所需要的方法,無(wú)關(guān)的方法則不用實(shí)現(xiàn)。事件適配器為提供了一種簡(jiǎn)單的實(shí)現(xiàn)監(jiān)聽(tīng)器的手段,可以縮短程序代碼。1712.5.5案例分析:鍵盤(pán)和鼠標(biāo)事件類綜合實(shí)例1.案例描述利用一個(gè)文本框組件接收從鍵盤(pán)輸入的文字,同時(shí)將所觸發(fā)的“鍵盤(pán)事件”顯示在一個(gè)文本區(qū)組件中。利用鼠標(biāo)拖動(dòng)窗口中按鈕,同時(shí)將鼠標(biāo)指針當(dāng)前的位置顯示在文本框中。1812.5.5案例分析:鍵盤(pán)和鼠標(biāo)事件類綜合實(shí)例2.案例分析本案例至少需要?jiǎng)?chuàng)建2個(gè)文本區(qū),1個(gè)文本框和1個(gè)按鈕。為了響應(yīng)鼠標(biāo)和鍵盤(pán)事件需要編程實(shí)現(xiàn)KeyListener接口、MouseListener接口和MouserMotionListener接口。為了將兩種事件類分別演示,需要將窗口布局設(shè)置為CardLayout方式,同時(shí)還需增加至少兩個(gè)按鈕來(lái)完成翻頁(yè)功能。演示程序:KeyAndMouse_Exam.java19練習(xí)題:編寫(xiě)一個(gè)允許學(xué)生在文本字段中輸入一個(gè)數(shù)的程序。創(chuàng)建一個(gè)每當(dāng)用戶單擊一次就將此數(shù)加一的按鈕。創(chuàng)建另一個(gè)每當(dāng)用戶單擊一次就將此數(shù)減一的按鈕。界面效果如下圖所示。20importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classIncrementorimplementsActionListener{JTextFieldnumberTxf;JButtonincrementBtn,decrementBtn;publicvoidmakeGUI(){JFramefrm=newJFrame("Incrementor");Containerc=frm.getContentPane();c.setLayout(newFlowLayout());numberTxf=newJTextField("0",5);c.add(numberTxf);incrementBtn=newJButton("Increment");c.add(incrementBtn);
incrementBtn.addActionListener(this);decrementBtn=newJButton("Decrement");c.add(decrementBtn);
decrementBtn.addActionListener(this);frm.setSize(300,100);frm.setVisible(true);}21publicvoidactionPerformed(ActionEvente){intoldNum=Integer.parseInt(numberTxf.getText());intnewNum=oldNum;if(e.getActionCommand().equals("Increment")){newNum++;}elseif(e.getActionCommand().equals("Decrement")){newNum--;}numberTxf.setText(String.valueOf(newNum));}publicstaticvoidmain(Stringargs[]){Incrementori=newIncrementor();i.makeGUI();}}if(e.getSource()==incrementBtn){elseif(e.getSource()==decrementBtn){22練習(xí)題:用JComboBox和JCheckBox來(lái)演示可選項(xiàng)目事件接口,界面如下圖所示:23importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassItemDemoimplementsItemListener{JFramef;JPanelp1,p2,p3;JLabelbirthPlace,hobby;JComboBoxplace;JCheckBoxhobby1,hobby2,hobby3;publicItemDemo(Stringtitle){f=newJFrame(title);p1=newJPanel();birthPlace=newJLabel("出生地:");place=newJComboBox();place.addItemListener(this);place.addItem("杭州");place.addItem("寧波");place.addItem("溫州");place.addItem("紹興");p1.add(birthPlace);p1.add(place);f.add(p1,"North");24p2=newJPanel();p2.setLayout(newGridLayout(3,1));hobby=newJLabel("業(yè)余愛(ài)好:");hobby1=newJCheckBox("運(yùn)動(dòng)");
hobby1.addItemListener(this);hobby2=newJCheckBox("旅游");
hobby2.addItemListener(this);hobby3=newJCheckBox("上網(wǎng)");
hobby3.addItemListener(this);p2.add(hobby1);p2.add(hobby2);p2.add(hobby3);p3=newJPanel();p3.add(hobby);p3.add(p2);f.add(p3,"Center");
f.pack();f.setVisible(true);}25publicvoiditemStateChanged(ItemEvente){if
溫馨提示
- 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āo)售渠道拓展合同
- 2025年度二手房買(mǎi)賣(mài)合同交易手續(xù)辦理指南
- 2025年度文化創(chuàng)意產(chǎn)業(yè)項(xiàng)目合作開(kāi)發(fā)合同4篇
- 2025年度寧夏糧食和物資儲(chǔ)備局糧食儲(chǔ)備庫(kù)安全管理合同4篇
- 二零二五年度高品質(zhì)木箱紙箱租賃經(jīng)營(yíng)合同3篇
- 二零二五年停薪留職員工績(jī)效管理合同
- 二零二五年度床上用品電商平臺(tái)合作推廣合同2篇
- 江蘇省村衛(wèi)生室人員合理用藥培訓(xùn)
- 二零二五年度民政局認(rèn)證離婚協(xié)議書(shū)范本
- 二零二五年度林地使用權(quán)租賃合同范例3篇
- 《中國(guó)高考評(píng)價(jià)體系》解讀(化學(xué)學(xué)科)
- 公司發(fā)展能力提升方案
- 電梯安全守則及乘客須知
- IT硬件系統(tǒng)集成項(xiàng)目質(zhì)量管理方案
- 《容幼穎悟》2020年江蘇泰州中考文言文閱讀真題(含答案與翻譯)
- 水上水下作業(yè)應(yīng)急預(yù)案
- API520-安全閥計(jì)算PART1(中文版)
- 2023年廣東省廣州地鐵城際鐵路崗位招聘筆試參考題庫(kù)附帶答案詳解
- 商務(wù)提成辦法
- 直流電機(jī)電樞繞組簡(jiǎn)介
- GB/T 19889.5-2006聲學(xué)建筑和建筑構(gòu)件隔聲測(cè)量第5部分:外墻構(gòu)件和外墻空氣聲隔聲的現(xiàn)場(chǎng)測(cè)量
評(píng)論
0/150
提交評(píng)論