複製鏈接
請複製以下鏈接發送給好友

事件處理機制

鎖定
Java語言中,當用户與(GUI組件交互時,GUI組件能夠激發一個相應事件。例如,用户按動按鈕、滾動文本、移動鼠標或按下按鍵等,都將產生一個相應的事件。Java提供完善的事件處理機制,能夠監聽事件,識別事件源,並完成事件處理。 [1] 
中文名
事件處理機制
外文名
event processing mechanism
類    型
事件處理框架
對    象
事件、事件源、事件監聽器等
系    統
計算機
應用學科
計算機原理

目錄

事件處理機制技術簡介

事件處理機制是一種事件處理框架,其設計目的是把GUI交互動作(單擊、菜單選擇等)轉變為調用相關的事件處理程序進行處理。JDK 1.1以後Java採取了授權處理機制(Delegation—based Model),事件源可以把在其自身所有可能發生的事件分別授權給不同的事件處理者來處理。
由於窗口管理器無法直接調用開發人員提供的事件處理程序,必須在運行時告訴事件模型哪一個例程用於處理事件。因此,為了獲取任何事件,開發人員必須事先通知窗口系統,令其將事件發送給自己提供的事件處理程序,把事件處理程序註冊為窗口管理器中的一個回調例程.使之連接到產生事件的組件上。 [2] 

事件處理機制對象

在事件處理機制中有幾個構成要素及其之間的相可:關係是非常重要的,主要包括事件、事件源、事件監聽器、事件適配器等。
1)事件(Event):可以理解為對一個組件的某種同類型操作動作的集合。例如,單擊一個按鈕、在文本框中輸入一個字符串、選擇一個菜單選項、選中一個單選按鈕等都可以認為是一個操作動作。而利用鼠標單擊按鈕、進入按鈕、移出按鈕、按下按鈕、鬆開按鈕等,可以認為是同一種類型的動作操作,因其都是通過鼠標完成的,這種同類型的動作操作,就可以統一的由鼠標事件來描述。Java按照事件產生的方式,將事件歸類彙總後分為若干種類型,如鼠標事件、鍵盤事件、窗口事件、選擇事件等
2)事件源(Event Source):可以理解為產生事件的源頭,也即發生事件的組件。Java認為,如果組件產生了一個動作,就表明發生了這個動作所歸屬的事件一例如,單擊一次btn按鈕,則btn按鈕就是一個事件源,對應的事件為鼠標事件;在tf文本框中輸入一個字符串,則tf文本框也是一個事件源,對應的事件為鍵盤事件。
3)事件監聽器(Listener):事件處理機制中的核心部分它的主要功能如下:①監聽組件,觀察組件有沒有發生某類事件;②如果監聽的組件發生了某類事件,則調用對應的動作處理方法立刻處理這個事件。通過監聽器的功能可以看出,在Java事件處理機制中,監聽器處於主體地位,與事件分類對應,監聽器也相應地分成若干種類型,如鼠標事件對應鼠標監聽器,鍵盤事件對應鍵盤監聽器,窗口事件對應窗口監聽器等。需要説明的是,如果希望監聽並處理一個組件的某類事件,則必須先給該組件添加塒應的事件監聽器。如果不給組件添加事件監聽器,則該組件發生任何的事件都不會被監聽器監聽到,從而也不會產生任何的響應。監聽器屬於接口類型,實現某一種監聽器就必須實現該監聽器的所有方法。
4)事件適配器(Adapter):這個概念可以認為是一個簡化版的監聽器。監聽器是對一類事件可能產生的所有動作進行監聽。例如,鼠標監聽器監聽的是鼠標按鍵能夠產生的所有動作,包括鼠標單擊、鼠標按下、鼠標鬆開等。因為監聽器屬於接口,如果純粹使用監聽器來完成動作處理的操作,則程序必須實現這個監聽器所有的動作處理方法。在進行具體的程序設計時,只需要監聽某類事件中的一個動作即可。例如,有時候我們僅對鼠標單擊按鈕這個動作感興趣,而對鼠標進入按鈕、鼠標移動按鈕等動作不需要進行編程響應動作。這個時候,就可以使用事件適配器,因為適配器可以由程序設計人員自主選擇監聽和響應的動作,從而簡化了監聽器的監聽工作,當然,相應的能夠監聽的動作會變少,具體需要監聽並響應何種動作,由程序設計人員根據實際需要在代碼中自行指定。 [3] 

事件處理機制應用

Android平台的事件處理機制有兩種,一種為回調機制,另一種為監聽接口機制。
基於回調機制的事件處理
Android平台中,每個View都有自己的處理事件的回調方法,開發人員可以通過重寫View中的這些回調方法來實現需要的響應事件。當某個事件沒有被任何一個View處理時,便會調用Activity中相應的回調方法。Android提供了以下回調方法供用户使用:
(1)public boolean onKeyDown(int keyCode,KeyEvent event)。
該方法是接口KeyEvent.Callback中的抽象方法,所有的View全部實現了該接口並重寫了該方法,該方法用來捕捉手機鍵盤被按下的事件。
(2)public boolean onKeyUp(int keyCode,KeyEvent event)。
該方法同樣是接口KeyEvent.Callback中的一個抽象方法,並且所有的View同樣全部實現了該接口並重寫了該方法,onKeyUp方法用來捕捉手機鍵盤按鍵抬起的事件。
(3)public boolean onTouchEvent(MotionEvent event)。
該方法在View類中的定義,並且所有的View子類全部重寫了該方法,應用程序可以通過該方法處理手機屏幕的觸摸事件。
(4)public boolean onTrackballEvent(MotionEvent event)。
軌跡球的處理方法onTrackBallEvent。所有的View同樣全部實現了該方法。
(5)protected void onFocusChanged(boolean gainFocus,int direction,Rect previously Focuse-dReet)。
該方法是焦點改變的回調方法,當某個控件重寫了該方法後,當焦點發生變化時,會自動調用該方法來處理焦點改變的事件。
基於監聽接口的事件處理
基於監聽的事件處理主要涉及如下三個對象。
(1)EventSource(事件源)。
事件發生的場所,通常就是各個組件,例如窗口、按鈕、菜單等。
(2)Event(事件)。
事件封裝了界面組件上發生的特定事情,通常是一次用户操作,如果程序需要獲得界面組件上所發生事件的相關信息,一般通過Event對象來取得。
(3)EventListener(事件監聽器)。
負責監聽事件源所發生的事件,並對各種事件作出相應的響應。
Android中常用的事件監聽器
(1)OnClickListener接口。
該接口處理的是點擊事件。在觸控模式下,是在某個View上按下並抬起的組合動作,而在鍵盤模式下,是某個View獲得焦點後點擊確定鍵或者按下軌跡球事件。
(2)OnLongClickListener接口。
OnLongcllickListener接口與之前介紹的OnClickListener接口原理基本相同,只是該接口為View長按事件的捕捉接口,即當長時間按下某個View時觸發的事件。
(3)OnFocusChangeListener接口。
OnFocusChangeListener接口用來處理控件焦點發生改變的事件。如果註冊了該接口,當某個控件失去焦點或者獲得焦點時都會觸發該接口中的回調方法。
(4)OnKeyListener接口。
OnKeyListener是對手機鍵盤進行監聽的接口,通過對某個View註冊該監聽,當View獲得焦點並有鍵盤事件時,便會觸發該接口中的回調方法。
(5)OnTouchListener接口。
OnTouchListener接口是用來處理手機屏幕事件的監聽接口,當為View的範圍內觸摸按下、抬起或滑動等動作時都會觸發該事件。
(6)OnCreateContextMIenuLitstener接口。
OnCreateContextMenuListener接口是用來處理上下文菜單顯示事件的監聽接口。該方法是定義和註冊上下文菜單的另一種方式。
在“Android手機連連看”項目中,我們將使用基於監聽接口方式來進行事件處理,並利用OnClickListener接口來捕獲用户點擊遊戲地圖的操作。 [4] 
參考資料
  • 1.    馬春燕主編;馬春燕,張濤,王少熙,陸偉編,面向對象思維 設計與項目實踐,西北工業大學出版社,2015.08,第275頁
  • 2.    温秀梅,祁愛華編著,JAVA程序設計教程,清華大學出版社,2014.09,第180頁
  • 3.    程科,潘磊主編;陳慶芳,王平心,張靜參編,Java程序設計教程,機械工業出版社,2015.09,第143頁
  • 4.    周清平總主編;黃偉主編;鍾鍵,馬慶槐,閆茂源,鄭婕,羅歡副主編,ANDROID項目開發實踐,中南大學出版社,2015.04,10-11