JFrame 實現 MouseListener + MouseMotionListenerJLabel statusBar 顯示實時事件信息addMouseListener(this)、addMouseMotionListener(this)MouseEvent.getX()/getY() 獲取座標
package test.lrd;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test01 extends JFrame implements MouseListener, MouseMotionListener {
private JLabel statusBar;
public test01() {
super("Java 鼠標事件監聽演示");
statusBar = new JLabel();
add(statusBar, BorderLayout.SOUTH);
addMouseListener(this);
addMouseMotionListener(this);
setSize(275, 100);
setVisible(true);
}
@Override public void mouseClicked(MouseEvent e) {
statusBar.setText("Clicked at [" + e.getX() + "," + e.getY() + "]");
}
@Override public void mousePressed(MouseEvent e) {
statusBar.setText("Pressed at [" + e.getX() + "," + e.getY() + "]");
}
@Override public void mouseReleased(MouseEvent e) {
statusBar.setText("Released at [" + e.getX() + "," + e.getY() + "]");
}
@Override public void mouseEntered(MouseEvent e) {
statusBar.setText("Mouse in window");
}
@Override public void mouseExited(MouseEvent e) {
statusBar.setText("Mouse outside window");
}
@Override public void mouseDragged(MouseEvent e) {
statusBar.setText("Dragged at [" + e.getX() + "," + e.getY() + "]");
}
@Override public void mouseMoved(MouseEvent e) {
statusBar.setText("Moved at [" + e.getX() + "," + e.getY() + "]");
}
public static void main(String args[]) {
test01 app = new test01();
app.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) { System.exit(0); }
});
}
}
| 介面 | 方法 | 觸發條件 |
|---|---|---|
| MouseListener | mouseClicked | 按下並釋放(單擊) |
| mousePressed | 按下瞬間 | |
| mouseReleased | 釋放瞬間 | |
| mouseEntered | 進入組件邊界 | |
| mouseExited | 離開組件邊界 | |
| MouseMotionListener | mouseDragged | 按住移動 |
| mouseMoved | 未按住移動 |
MouseAdapter/MouseMotionAdapter 覆寫單一方法,避免空實現getX()/getY() 相對**事件源組件**;getXOnScreen()/getYOnScreen() 為螢幕絕對座標mousePressed 記錄起點 → mouseDragged 計算位移更新組件位置 → mouseReleased 確認mouseMoved、mouseDragged)避免耗時操作/日志,必要時節流setOnMouseClicked、setOnMouseDragged 等 Lambda 風格事件處理MouseInputAdapter:同時實現雙介面的適配器基類掌握 7 大鼠標事件觸發條件、座標系統、適配器模式、高頻事件性能考量,是構建交互式 GUI(繪圖、拖拽、游戲、編輯器)的基石。Swing 事件模型雖經典,但思想通用於所有 GUI 框架。