之前幾篇部落格中,我們編寫了一些示例,但是這些示例并不能與讀者進行互動,讀者之是以對圖形界面感興趣,就是因為圖形界面與讀者互動能力強。但是單純的界面是沒有使用價值的,要是圖形界面能與讀者交流,那麼必須了解java的事件處理機制。
首先元件要先注冊事件處理器,當讀者單擊元件、移動滑鼠或者敲擊鍵盤都會産生事件(event)。一旦有事件産生,應用程式做出對該事件的響應,這些元件就是事件源(event source)。接受、解析和處理事件,實作和讀者互動的方法稱之為事件處理器(event handler)。他們之間的工作關系如圖:
created with raphaël 2.1.0外部作用事件源已注冊事件處理器
事件源可以産生多種不同類型的事件,可以注冊多種不同類型的事件監聽器。當元件上發生某種事件,生成相應的事件對象,該對象中封裝了有關該事件的各種資訊。該對象被傳遞到相應的注冊的事件處理器,這時事件的處理方法才執行。
事件監聽器是類庫中的一組接口,每種事件類都有一個負責監聽這種事件對象的接口。接口中定義了處理該事件的抽象方法。
接口隻是一個抽象定義,要想使用必須實作它。是以每次對事件進行處理是調用對應接口的實作類中的方法。當事件源産生事件并生成事件對象,該對象被送到事件處理器中,處理器調用接口實作類對象中的相應方法來處理該事件。
要想啟動相應的事件監聽器必須在程式中注冊它。
當單擊按鈕時,将生成事件對象,對象中包含了事件源(按鈕)的資訊傳送到已注冊的事件監聽器,監聽器調用相應方法并将該對象傳入。
java處理事件響應的類和監聽接口大多位于awt包中。在<code>java.swing.event</code>包中有專門用于swing元件的事件類和監聽接口。
awt事件類繼承自awtevent,他們的超類是eventobject。在awt事件中,事件分為低級事件和語義事件。語義事件是對某些低級事件的一種抽象概括,是單個或多個低級事件的某些特例的集合。
常用低級事件有:
事件
說明
keyevent
按鍵按下和釋放産生該事件
mouseevent
滑鼠按下、釋放、拖動、移動産生該事件
focusevent
元件失去焦點産生該事件
windowevent
視窗發生變化産生該事件
常用語義事件有:
actionevent
當單擊按鈕、選中菜單或在文本框中回車等産生該事件
itemevent
選中多選框、選中按鈕或者單擊清單産生該事件
常用事件和事件監聽器如下:
事件類型
對應的監聽器
監聽器接口中的抽象方法
action
actionlistener
actionperformed(actionevent e)
mouse
mouselistener
mouseclicked(mouseevent e)、mouseentered(mouseevent e)、mouseexited(mouseevent e)、mousepressed(mouseevent e)、mousereleased(mouseevent e)
mousemotion
mousemotionlistener
mousedragged(mouseevent e)、mousemoved(mouseevent e)
item
itemlistener
itemstatechanged(itemevent e)
key
keylistener
keypressed(keyevent e)、keyreleased(keyevent e)、keytyped(keyevent e)
focus
focuslistener
focusgained(focusevent e)、focuslost(focusevent e)
window
windowlistener
windowactivated(windowevent e)、windowclosed(windowevent e)、windowclosing(windowevent e)、windowdeactivated(windowevent e)、windowdeiconified(windowevent e)、windowiconified(windowevent e)、windowopened(windowevent e)
component
componentlistener
componenthidden(componentevent e)、componentmoved(componentevent e)、componentresized(componentevent e)、componentshown(componentevent e)
text
textlistener
textvaluechanged(textevent e)
事件擴充卡其實就是一個接口的實作類,實際上擴充卡類隻是将監聽接口方法中的方法全部實作成空方法。這樣在定義事件監聽器時就可以繼承該實作類,并重寫所需要的方法,不必實作覆寫所有方法了。常用的事件擴充卡類有如下擊中
擴充卡
mouseadapter
滑鼠事件擴充卡
windowadapter
視窗事件擴充卡
keyadapter
鍵盤事件擴充卡
focusadapter
焦點擴充卡
mousemotionadapter
滑鼠移動事件擴充卡
componentadapter
元件源擴充卡
containeradapter
容器源事件擴充卡