版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
JavaAWT事件處理機制
如果用戶在用戶界面層執(zhí)行了一個動作(鼠標點擊和按鍵),這將導(dǎo)致一個事件的發(fā)生。事件是描述發(fā)生了什么的對象。存在各種不同類型的事件類用來描述各種類型的用戶交互。事件源是一個事件的產(chǎn)生者。例如,在Button組件上點擊鼠標會產(chǎn)生以這個Button為源的一個ActionEvent。這個ActionEvent實例是一個對象,它包含關(guān)于剛才所發(fā)生的那個事件的信息的對象。事件處理器就是一個接收事件、解釋事件并處理用戶交互的方法。
Java語言采用委托事件模型進行事件的處理。在這個模型中,已經(jīng)定義好了事件源可能產(chǎn)生的事件類型和與該事件類型相對應(yīng)的接口,它們位于java.awt.event包和javax.swing.event包中。事件監(jiān)聽者是實現(xiàn)與該事件相對應(yīng)的接口的類的對象。例如,對JButton組件進行單擊,就產(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);對窗口進行縮放或關(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)的處理者來接收事件對象,并對其進行處理。事件的處理者要時刻監(jiān)聽是否有事件產(chǎn)生,如果監(jiān)視到有事件產(chǎn)生,就會自動調(diào)用相應(yīng)的事件處理程序進行事件處理,正因為如此,一般把事件的處理者叫事件監(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é)將通過一個范例說明事件的處理過程。它將跟蹤鼠標被按下時,鼠標的移動情況(鼠標拖動),還將監(jiān)測當(dāng)鼠標沒有按下時,鼠標的移動情況(鼠標移動)。當(dāng)鼠標按下或沒有按下時,移動鼠標產(chǎn)生的事件會被實現(xiàn)了MouseMotionListener接口的類的對象檢取。這個接口要求定義兩個方法,mouseDragged()和mouseMoved()。即使你只對鼠標拖動感興趣,也必須提供這兩個方法,但是mouseMoved()的體可以是空的。
要檢取其他鼠標事件,包括鼠標點擊,必須定義MouseListener接口。這個接口包括若干個事件,即mouseEntered、mouseExited、mousePressed、mouseReleased和mouseClicked。發(fā)生鼠標或鍵盤事件時,有關(guān)鼠標的位置和所按下的鍵的信息可以從事件中得到,代碼如下。例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)在窗口中拖動鼠標時,底端的TextField中將顯示鼠標的當(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年池州職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試參考題庫含詳細答案解析
- 2026年貴陽職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試參考題庫含詳細答案解析
- 2026年安徽電子信息職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試參考題庫含詳細答案解析
- 2026年云南經(jīng)濟管理學(xué)院單招綜合素質(zhì)考試模擬試題含詳細答案解析
- 2026年鄭州旅游職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題及答案詳細解析
- 2026年內(nèi)蒙古體育職業(yè)學(xué)院單招職業(yè)技能考試備考試題含詳細答案解析
- 2026年山西林業(yè)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試模擬試題含詳細答案解析
- 2026年烏海職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考試題含詳細答案解析
- 2026年河南應(yīng)用技術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試備考題庫及答案詳細解析
- 2026廣西百色市公開遴選公務(wù)員17人備考考試試題及答案解析
- 特長生合同(標準版)
- 國家民用航空安全保衛(wèi)質(zhì)量控制方案
- 妊娠合并乙肝的課件
- 建筑施工安全檢查評分表(完整自動計算版)
- 2025年中國肝素鈉數(shù)據(jù)監(jiān)測報告
- 急性腦?;颊咦o理課件
- 2025年高職單招職業(yè)技能邏輯推理類專項練習(xí)卷及答案
- 中藥材儲存與養(yǎng)護規(guī)范
- 2025年藥品經(jīng)營和使用質(zhì)量監(jiān)督管理辦法考核試題【含答案】
- 客戶案例經(jīng)典講解
- 礦山智能化開采2025年無人作業(yè)技術(shù)智能化礦山設(shè)備智能化技術(shù)路線圖報告
評論
0/150
提交評論