首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Swing 事件處理機制全圖鑑:13 大監聽器介面與事件類別完整對照

     編輯:Java 相關知識

事件驅動程式設計核心三要素

  • Event Source(事件源):產生事件的元件(Button、TextField 等)
  • Event Object(事件物件):封裝事件狀態資訊(ActionEvent、MouseEvent 等)
  • Event Listener(監聽器):實作特定介面處理事件的物件

13 種核心監聽器完整對照表

監聽器介面處理方法事件類別關鍵方法觸發情境
ActionListener actionPerformed ActionEvent getActionCommand()、getModifiers()、getWhen() 按鈕點擊、清單選擇、文字框 Enter、計時器到期
AdjustmentListener adjustmentValueChanged AdjustmentEvent getAdjustable()、getAdjustmentType()、getValue() 捲軸滾動(UNIT/BLOCK 增減、TRACK)
ItemListener itemStateChanged ItemEvent getItem()、getItemSelectable()、getStateChange() 核取方塊、選項按鈕、清單項目選取/取消
FocusListener focusGained、focusLost FocusEvent getOppositeComponent()、isTemporary() 元件取得/失去焦點(滑鼠拖曳視窗為暫時性)
KeyListener keyPressed、keyReleased、keyTyped KeyEvent getKeyChar()、getKeyCode()、getKeyModifiersText()、getKeyText() 鍵盤按下/釋放/輸入字符(keyTyped 才支援組合鍵字符)
MouseListener mouseClicked、mousePressed、mouseReleased、mouseEntered、mouseExited MouseEvent getPoint()、getX/Y()、getClickCount()、getButton()、isPopupTrigger() 滑鼠點擊、進入/離開元件區域
MouseMotionListener mouseDragged、mouseMoved MouseEvent 同上 滑鼠移動(拖曳/單純移動)
MouseWheelListener mouseWheelMoved MouseWheelEvent getScrollType()、getScrollAmount()、getWheelRotation() 滑鼠滾輪滾動(單位/區塊、旋轉方向)
WindowListener 7 個方法:opened、closing、closed、iconified、deiconified、activated、deactivated WindowEvent getWindow()、getOppositeWindow()、getOldState()、getNewState() 視窗開啟/關閉/最小化/最大化/啟動/停用
WindowFocusListener windowGainedFocus、windowLostFocus WindowEvent 同上 視窗取得/失去焦點
WindowStateListener windowStateChanged WindowEvent 同上 視窗狀態變更(最小化/最大化/正常)
ComponentListener componentResized、moved、shown、hidden ComponentEvent getComponent() 元件大小/位置/可見度變更
ContainerListener componentAdded、componentRemoved ContainerEvent getChild()、getContainer() 容器增減子元件

實務開發關鍵提醒

  • 介面方法過多:善用 XxxAdapter 抽象類別(如 MouseAdapter、WindowAdapter)只覆寫需求方法
  • 事件源多工:單一監聽器可註冊多個元件,透過 e.getSource() 區分
  • 座標系轉換:translatePoint() 可將滑鼠座標偏移,繪圖應用常用
  • 彈出選單觸發:跨平台差異大,需同時在 mousePressed 和 mouseReleased 檢查 isPopupTrigger()
  • 焦點暫時性轉移:isTemporary() 區分視窗拖曳 vs 實際焦點切換

事件處理流程圖解

使用者操作 → 事件源建立 EventObject → 通知已註冊 Listener → 呼叫對應處理方法
     ↑                                                                      ↓
     └────────────────── 更新 UI 狀態 / 啟動業務邏輯 ← 方法執行完成 ──────┘
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved