Java GUI 事件監聽

 

如今使用的還是AWT的事件模型。涉及到3類對象:component

  • Event Source:事件源,即事件發生所在的組件
  • Event:事件,封裝了這次事件的相關信息
  • Event Listener:事件監聽器,監聽事件,發生指定事件時自動調用對應的方法

監聽器能夠繼承接口本身寫代碼實現,也能夠繼承適配器(空實現),而後只重寫部分方法的實現。orm

 

 

事件可分爲2類:對象

一、低級事件:基於具體的動做,包括繼承

事件 觸發條件 監聽器  適配器 方法
KeyEvent   鍵盤事件  按下、鬆開、單擊鍵盤上的某個鍵時觸發  KeyListener      KeyAdapter

keyPressed:按下某個鍵時觸發接口

keyReleased:鬆開某個鍵時觸發事件

keyTyped:單擊某個鍵時觸發資源

MouseEvent   鼠標事件  

 MouseListenerit

 

MouseMotionListenerio

 MouseAdaptertable

 

MouseMotionAdapter

MouseListener的5個方法:

mousePressed:按下某個鼠標鍵時觸發

mouseReleased:鬆開某個鼠標鍵時觸發

mouseClicked:單擊某個鼠標鍵時觸發

mouseEntered:鼠標移入該組件時觸發

mouseExited:鼠標移出該組件時觸發

 

MouseMotionListener的2個方法:

mouseMoved:在該組件上移動鼠標時觸發

mouseDragged:在該組件上按下某個鼠標鍵並移動鼠標時觸發,如在畫布上畫圖

FocusEvent   焦點事件 得到焦點、失去焦點時觸發  FocusListener  FocusAdapter

focusGained:獲取焦點時觸發

focusLost:失去焦點時觸發

WindowEvent  窗體事件

打開窗口、關閉窗口,

窗口最大化、最小化時觸發

 WindowListener  WindowAdapter

windowOpened:打開窗口時觸發

windowClosing:單擊右上角的「X」時觸發

windowClosed:調用dispose()釋放窗體資源時觸發

 

windowDeactivated:窗口失活(失去焦點)時觸發

windowDeiconified:窗口從新得到焦點時觸發(恢復)

windowActivated:窗口被激活(得到焦點)時觸發,首次+恢復

 

windowIconified:窗口最小化時觸發

ContainerEvent   容器事件 往容器中添加、移除組件時觸發 ContainerListener   ContainerAdapter

componentAdded:往容器中添加組件時觸發

componentRemoved:從容器中移除組件時觸發

ComponentEvent  組件事件

組件的尺寸發生變化、

位置發生改變、

組件被隱藏/顯示時觸發

 ComponentListener  ComponentAdapter

componentResized:組件尺寸發生變化時觸發

componentMoved:組件的位置發生改變時觸發

componentHidden:組件被隱藏時觸發

componentShown:組件被顯示時觸發

PaintEvent  組件繪製事件 調用組件的paint()/update()來繪製時觸發      

 

 

 

二、高級事件(語義事件),不和具體的動做關聯,只表示發生了該事件,包括:

事件   觸發條件 監聽器 適配器 方法
ActionEvent  動做事件 按鈕、菜單項、輸入框被單擊/手動Enter時觸發 ActionListener ActionAdapter actionPerformed
AdjustmentEvent  調節事件 移動滑塊調節數值值觸發 AdjustmentListener AdjustmentAdapter adjustmentValueChanged
ItemEvent 選中、取消選中某項時觸發 ItemListener ItemAdapter itemStateChanged
TextEvent 文本框、文本域中的文本發生改變時觸發 TextListener TextAdapter textValueChanged

以上接口中均只有一個抽象方法,若採用匿名內部實現,可以使用lambda表達式。

 

 

 

給組件添加事件監聽:

component.addXxxListener(XxxListener/XxxAdapter  listener);

 

 

 

實現監聽器的4種方式:

一、內部類形式實現

在此外部類中,可複用這個監聽器,可直接訪問外部類中全部的UI組件。

若外部類中有多個組件要使用此監聽器,可以使用此種方式。

 

二、匿名內部類形式實現

簡便,適合只使用一次的監聽器。

 

三、外部類形式實現

監聽器屬於特定的GUI界面,使用外部類實現監聽器,不利於提升程序的內聚性。

且外部類形式的監聽器不能訪問其餘類表明的GUI界面的組件。

但能夠被多個類共享。

不推薦。

 

四、類自己做爲監聽器(實現接口、繼承改寫適配器)

代碼混亂,可讀性降低,不推薦。

 

 

類表明的GUI界面主要負責顯示邏輯,儘可能不要將業務邏輯直接寫在GUI類中,

能夠將業務邏輯寫在單獨的類/接口中,而後在顯示邏輯中調用,下降了耦合,後期好維護。

相關文章
相關標籤/搜索