天天看點

JAVA圖形界面(GUI)之事件處理機制事件監聽器事件的種類事件擴充卡

之前幾篇部落格中,我們編寫了一些示例,但是這些示例并不能與讀者進行互動,讀者之是以對圖形界面感興趣,就是因為圖形界面與讀者互動能力強。但是單純的界面是沒有使用價值的,要是圖形界面能與讀者交流,那麼必須了解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

容器源事件擴充卡