對(duì)于圖形用戶界面的程序來說,事件處理是十分重要的。要想實(shí)現(xiàn)用戶界面,必須掌握J(rèn)ava事件處理的基本方法。
任何支持GUI的操作環(huán)境都要不斷地監(jiān)視敲擊鍵盤或點(diǎn)擊鼠標(biāo)這樣的事件。操作環(huán)境將這些事件報(bào)告給正在運(yùn)行的應(yīng)用程序。如果有事件產(chǎn)生,每個(gè)應(yīng)用程序?qū)?決定如何對(duì)它們作出響應(yīng)。在VisualBasic這樣的語言中,事件與代碼之間有著明確的對(duì)應(yīng)關(guān)系。程序員對(duì)相關(guān)的特定事件編寫代碼,并將這些代碼放置 在過程中,通常人們將它們稱為事件過程(event procedure)。例如,有一個(gè)名為HelpButton的VisualBasic按鈕有一個(gè)與之關(guān)聯(lián)的HelpButton_Click時(shí)間過程。 這個(gè)過程中的代碼將在點(diǎn)擊按鈕后執(zhí)行。每個(gè)VisualBasic的GUI組件都響應(yīng)一個(gè)固定的事件集,不可能改變VisualBasic組件響應(yīng)的事件 集。
另一方面,如果使用像原始的C這樣的語言進(jìn)行事件驅(qū)動(dòng)的程序設(shè)計(jì),那就需要編寫代碼來 不斷地檢查事件隊(duì)列,以便查詢操作環(huán)境報(bào)告的內(nèi)容(通常這些代碼被放置在包含很多switch語句的循環(huán)體申)。顯然,這種方式編寫的程序可讀性很差,而 且在有些情況下,編碼的難度也非常大。它的好處在于響應(yīng)的事件不受限制,而不像VisualBasic這樣的語言,將事件隊(duì)列對(duì)程序員隱藏起來。
Java程序設(shè)計(jì)環(huán)境折中了VisualBasic與原始C的事件處理方式,因此,它既有著強(qiáng)大的功能,又具有一定的復(fù)雜性。在AWT所知的事件范圍 內(nèi),完全可以控制事件從事件源(event source)例如,按鈕或滾動(dòng)條,到事件監(jiān)聽器(event listener)的傳遞過程,并將任何對(duì)象指派給事件監(jiān)聽器。不過事實(shí)上,應(yīng)該選擇一個(gè)能夠便于響應(yīng)事件的對(duì)象。這種事件委托模型(event delegation model)與VisualBasic那種預(yù)定義監(jiān)聽器模型比較起來更加靈活。
事件源有一些向其注冊(cè)事件監(jiān)聽器的方法。當(dāng)某個(gè)事件源產(chǎn)生事件時(shí),事件源會(huì)向?yàn)槭录?cè)的所有事件監(jiān)聽器對(duì)象發(fā)送一個(gè)通告。
像Java這樣的面向?qū)ο笳Z言,都將事件的相關(guān)信息封裝在一個(gè)事件對(duì)象(event object)中,在Java中,所有的事件對(duì)象都最終派生于java.util.EventObject類。當(dāng)然,每個(gè)事件類型還有子類,例 如,ActionEvent和WindowEvent。
不同的事件源可以產(chǎn)生不同類別的事件。例如,按鈕可以發(fā)送一個(gè)ActionEvent對(duì)象,而窗扣可以發(fā)送WindowEvent對(duì)象。
綜上所述,下面給出AWT事件處理機(jī)制的概要:
監(jiān)聽器對(duì)象是一個(gè)實(shí)現(xiàn)了特定監(jiān)聽器接口(listener interface)的類的實(shí)例。
事件源是一個(gè)能夠注冊(cè)監(jiān)聽器對(duì)象并發(fā)送事件對(duì)象的對(duì)象。
當(dāng)事件發(fā)生時(shí),事件源將事件對(duì)象傳遞給所有注冊(cè)的監(jiān)聽器。
監(jiān)聽器對(duì)象將利用事件對(duì)象中的信息決定如何對(duì)事件做出響應(yīng)。
當(dāng)前名稱:網(wǎng)站建設(shè)核心之事件處理基礎(chǔ)
網(wǎng)站鏈接:http://www.rwnh.cn/news/192777.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項(xiàng)目有網(wǎng)站建設(shè)等
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)