版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
JavaAWT事件處理機(jī)制
如果用戶在用戶界面層執(zhí)行了一個動作(鼠標(biāo)點擊和按鍵),這將導(dǎo)致一個事件的發(fā)生。事件是描述發(fā)生了什么的對象。存在各種不同類型的事件類用來描述各種類型的用戶交互。事件源是一個事件的產(chǎn)生者。例如,在Button組件上點擊鼠標(biāo)會產(chǎn)生以這個Button為源的一個ActionEvent。這個ActionEvent實例是一個對象,它包含關(guān)于剛才所發(fā)生的那個事件的信息的對象。事件處理器就是一個接收事件、解釋事件并處理用戶交互的方法。
Java語言采用委托事件模型進(jìn)行事件的處理。在這個模型中,已經(jīng)定義好了事件源可能產(chǎn)生的事件類型和與該事件類型相對應(yīng)的接口,它們位于java.awt.event包和javax.swing.event包中。事件監(jiān)聽者是實現(xiàn)與該事件相對應(yīng)的接口的類的對象。例如,對JButton組件進(jìn)行單擊,就產(chǎn)生ActionEvent事件,與ActionEvent事件對應(yīng)的接口為ActionListener。如果用戶定義的一個名叫ButtonHandler的類實現(xiàn)了ActionListener接口的方法(以事件對象為參數(shù)),則ButtonHandler類的一個實例,就可以作為單擊事件的監(jiān)聽者。事件源需要被注冊到監(jiān)聽者才能被監(jiān)測到相對應(yīng)事件的發(fā)生,事件才能被處理。
事件是只向注冊的監(jiān)聽者報告的對象(作為方法的參數(shù))。每個事件都有一個對應(yīng)的監(jiān)聽者接口,規(guī)定哪些方法必須在適合接收那種類型的事件的類中定義。實現(xiàn)了定義那些方法的接口的類可以為一個監(jiān)聽者。事件與事件源
用戶在操作應(yīng)用程序界面中的組件時,就會產(chǎn)生事件(Event),例如單擊一個按鈕,就會產(chǎn)生一個動作事件(ActionEvent);對窗口進(jìn)行縮放或關(guān)閉等操作,就會產(chǎn)生一個窗口事件(WindowEvent);操作了鍵盤就會產(chǎn)生對應(yīng)的鍵盤事件(KeyEvent)。事件源指事件的來源對象,例如單擊一個按鈕時,這個按鈕就是事件源。在Java語言中“一切皆對象”,事件也不例外。當(dāng)事件源產(chǎn)生事件后,與該事件有關(guān)的信息,如事件源、事件類型等就會被系統(tǒng)封裝在一個事件對象中,在處理這個事件的程序中如果需要就可以取出有關(guān)信息。監(jiān)聽器
事件源產(chǎn)生事件后,就要有相應(yīng)的處理者來接收事件對象,并對其進(jìn)行處理。事件的處理者要時刻監(jiān)聽是否有事件產(chǎn)生,如果監(jiān)視到有事件產(chǎn)生,就會自動調(diào)用相應(yīng)的事件處理程序進(jìn)行事件處理,正因為如此,一般把事件的處理者叫事件監(jiān)聽器。事件類型對于每類事件,都有一個接口,這個接口必須由想接收這個事件的類實現(xiàn)。實現(xiàn)接口的類要求實現(xiàn)接口的一個或多個方法,當(dāng)發(fā)生特定的事件時,就會調(diào)用這些方法。表8.4列出了這些(事件)類型,并給出了每個類型對應(yīng)的接口名稱,以及所要求定義的方法。這些方法的名稱是易于記憶的,名稱表示了會引起這個方法被調(diào)用的源或條件。表8.4方法類型和接口
事件類型接口名要實現(xiàn)方法ActionEventActionListeneractionPerformed(ActionEvent)ItemItemListeneritemStateChanged(ItemEvent)MousemotionMouseMotionListenermouseDragged(MouseEvent)mouseMoved(MouseEvent)MousebuttonMouseListenermousePressed(MouseEvent)mouseReleased(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)KeyKeyListenerkeyPressed(KeyEvent)keyReleased(KeyEvent)keyTyped(KeyEvent)FocusFocusListenerfocusGained(FocusEvent)focusLost(FocusEvent)AdjustmentAdjustmentListeneradjustmentValueChanged(AdjustmentEvent)ComponentComponentListenercomponentMoved(ComponentEvent)componentHidden(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)WindowWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)WindowDeiconified(WindowEvent)WindowClosed(WindowEvent)WindowActivated(WindowEvent)WindowDeactivated(WindowEvent)ContainerContainerListenercomponentAdded(ContainerEvent)ComponentRemoved(ContainerEvent)TextTextListenerTextValueChanged(TextEvent)ActionListener接口awt對這個接口的定義是:publicinterfaceActionListenerextendsEventListener{
publicabstractvoidactionPerformed(ActionEvente);}設(shè)計處理事件的類時,就要實現(xiàn)這個接口。其一般形式如下:classClassNameimplementsActionListener{…
…publicvoidactionPerformed(ActionEvente){…}}要創(chuàng)建監(jiān)視器(Classname)的對象,也就是監(jiān)聽者。Classname
對象名=newClassname()
通過實現(xiàn)ActionListener接口,使得監(jiān)視器能知道事件的發(fā)生。在Java中,要求產(chǎn)生事件的事件源向它的監(jiān)視器注冊,這樣,事件源與監(jiān)視器就建立了一個對應(yīng)關(guān)系。建立對應(yīng)關(guān)系的語句如下:對象名.addActionListener(ClassName的對象);其中,對象是事件源,ClassName的對象是監(jiān)視器。
btn.addActionListener(new
ClassName());
這條語句的意思是:按鈕對象(事件源)btn向它的監(jiān)視器注冊,也就是產(chǎn)生事件的事件源對象向監(jiān)視器注冊。事件處理過程(以密碼登錄為例)
本節(jié)將通過一個范例說明事件的處理過程。它將跟蹤鼠標(biāo)被按下時,鼠標(biāo)的移動情況(鼠標(biāo)拖動),還將監(jiān)測當(dāng)鼠標(biāo)沒有按下時,鼠標(biāo)的移動情況(鼠標(biāo)移動)。當(dāng)鼠標(biāo)按下或沒有按下時,移動鼠標(biāo)產(chǎn)生的事件會被實現(xiàn)了MouseMotionListener接口的類的對象檢取。這個接口要求定義兩個方法,mouseDragged()和mouseMoved()。即使你只對鼠標(biāo)拖動感興趣,也必須提供這兩個方法,但是mouseMoved()的體可以是空的。
要檢取其他鼠標(biāo)事件,包括鼠標(biāo)點擊,必須定義MouseListener接口。這個接口包括若干個事件,即mouseEntered、mouseExited、mousePressed、mouseReleased和mouseClicked。發(fā)生鼠標(biāo)或鍵盤事件時,有關(guān)鼠標(biāo)的位置和所按下的鍵的信息可以從事件中得到,代碼如下。例8.25ListenDemo.javaimportjava.awt.*;importjava.awt.event.*;publicclassListenDemo implementsMouseMotionListener,MouseListener{ privateFramef; privateTextFieldtf;publicstaticvoidmain(Stringargs[]) { ListenDemotwo=newListenDemo(); two.go();} publicvoidgo() { f=newFrame("Twolistenersexample"); f.add(newLabel("Clickanddragthemouse"),BorderLayout.NORTH); tf=newTextField(30); f.add(tf,BorderLayout.SOUTH); f.addMouseMotionListener(this); f.addMouseListener(this); f.setSize(300,200);
f.setVisible(true); }publicvoidmouseDragged(MouseEvente) {Strings="Mousedragging:X="+e.getX()+"Y="+e.getY(); tf.setText(s); } publicvoidmouseMoved(MouseEvente){} publicvoidmouseClicked(MouseEvente){} publicvoidmouseEntered(MouseEvente) { Strings="Themouseentered";
tf.setText(s); } publicvoidmouseExited(MouseEvente) { Strings="Themousehasleftthebuilding";tf.setText(s); } publicvoidmousePressed(MouseEvente) {} publicvoidmouseReleased(MouseEvente) {}
}
運行以上程序可看到如圖8.33所示界面。當(dāng)在窗口中拖動鼠標(biāo)時,底端的TextField中將顯示鼠標(biāo)的當(dāng)前位置。圖8.33●定義多了多個接口這個類由代碼:
implementsMouseMotionListener,MouseListener
聲明。聲明多個接口時,可以用逗號隔開?!癖O(jiān)聽多個源如果調(diào)用方法:
f.addMouseListener(this);f.addMouseMotionListener(this);
則兩種類型的事件都會引起ListenDemo類中的方法被調(diào)用。一個對象可以“監(jiān)聽”任意數(shù)量的事件源;它的類只需要實現(xiàn)所要求的接口。事件Adapters(適配器)
一旦指定一個類實現(xiàn)了某個事件監(jiān)聽器接口,就必須實現(xiàn)這個監(jiān)聽器接口的所有方法,否則你只能將你的類定義為抽象類而無法定義這個類的實例。從上面的例子我們可以看到,實現(xiàn)每個Listener接口的所有方法的工作量均是非常大的,尤其是MouseListener接口和ComponentListener接口。以MouseListener接口為例,它定義了如下方法:
①mouseClicked(MouseEvent)②mouseEntered(MouseEvent)③mouseExited(MouseEvent)④mousePressed(MouseEvent)⑤mouseReleased(MouseEvent)
為了方便起見,Java語言提供了Adapters類,用來實現(xiàn)含有多個方法的類。這些Adapters類中的方法是空的。你可以繼承
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 不銹鋼的基礎(chǔ)知識王文華
- (2024)柑桔果渣綜合利用建設(shè)項目可行性研究報告(一)
- 2022-2023學(xué)年天津市河北區(qū)高二(上)期末語文試卷
- 2023年高收縮腈綸項目融資計劃書
- 烹飪原料知識習(xí)題庫(含參考答案)
- 《養(yǎng)生與防治》課件
- 養(yǎng)老院老人生活照料標(biāo)準(zhǔn)制度
- 養(yǎng)老院老人健康飲食營養(yǎng)師表彰制度
- 人教版教學(xué)課件免疫調(diào)節(jié)(上課)
- 《石油和油品》課件
- 遼寧省大連市沙河口區(qū)2022-2023學(xué)年八年級上學(xué)期物理期末試卷(含答案)
- 做賬實操-鞋廠的賬務(wù)處理
- 承插盤扣懸挑腳手架施工方案
- 播音主持專業(yè)教學(xué)計劃
- 2024年醫(yī)師定期考核臨床類人文醫(yī)學(xué)知識考試題庫及答案(共280題)
- 江蘇省南通市2024屆高三上學(xué)期第一次調(diào)研測試(一模)生物 含答案
- 2024年度企業(yè)數(shù)字化轉(zhuǎn)型服務(wù)合同
- 會議服務(wù)的合同范本(8篇)
- 電梯困人應(yīng)急演練方案
- 【初中歷史】西晉的短暫統(tǒng)一和北方各族的內(nèi)遷課件 2024-2025學(xué)年統(tǒng)編版七年級歷史上冊
- 2024供應(yīng)鏈合作伙伴采購基本協(xié)議
評論
0/150
提交評論