如今使用的還是AWT的事件模型。涉及到3類對象:component
監聽器能夠繼承接口本身寫代碼實現,也能夠繼承適配器(空實現),而後只重寫部分方法的實現。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類中,
能夠將業務邏輯寫在單獨的類/接口中,而後在顯示邏輯中調用,下降了耦合,後期好維護。