AWT 元件支援滑鼠事件監聽,通過 MouseListener 介面或適配器 MouseAdapter 可輕鬆實現單擊、雙擊、進入、離開等交互。本文示範按鈕點擊計數與雙擊判定完整代碼。
| 介面/類 | 方法 | 觸發時機 |
|---|---|---|
| MouseListener | mouseClicked | 點擊(按下+釋放)完成 |
| mousePressed | 滑鼠按下 | |
| mouseReleased | 滑鼠釋放 | |
| mouseEntered | 滑鼠進入元件區域 | |
| mouseExited | 滑鼠離開元件區域 | |
| MouseAdapter | 以上方法空實現 | 僅覆寫關心的方法,減少樣板碼 |
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
System.out.println("偵測到雙擊");
} else {
System.out.println("單擊,計數: " + clickCount++);
}
}
});
MouseEvent.getClickCount() 返回連續點擊次數(系統級雙擊速度閾值判定)。
import java.awt.*;
import java.awt.event.*;
public class MouseEventDemo {
public static void main(String[] args) {
Frame f = new Frame("滑鼠事件示範");
f.setBounds(300, 200, 300, 200);
f.setLayout(new FlowLayout());
Button btn = new Button("點擊測試");
f.add(btn);
// ActionEvent:鍵盤空格/Enter 也能觸發,語義更通用
btn.addActionListener(e -> System.out.println("ActionEvent: 按鈕被激活"));
// MouseEvent:可區分單雙擊,但鍵盤無法觸發
btn.addMouseListener(new MouseAdapter() {
int clickCount = 1;
@Override public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
System.out.println("MouseEvent: 雙擊!");
} else {
System.out.println("MouseEvent: 第 " + clickCount++ + " 次單擊");
}
}
});
f.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) { System.exit(0); }
});
f.setVisible(true);
}
}
| 維度 | ActionEvent | MouseEvent |
|---|---|---|
| 觸發來源 | 滑鼠點擊、鍵盤、無障礙工具 | 僅滑鼠 |
| 語義 | 「動作被執行」 | 「滑鼠物理動作」 |
| 雙擊支援 | 無 | 有 |
| 推薦場景 | 按鈕、選單項、一般命令 | 繪圖板、拖放、需區分單雙擊的元件 |
最佳實踐: 按鈕預設用
ActionListener;僅在需要「雙擊編輯」、「畫圖軌跡」等滑鼠專屬交互時加MouseListener。

Swing 元件(JButton 等)同樣支援上述事件,且提供更豐富的 MouseInputListener(含 MouseMotionListener)。現代專案建議直接使用 Swing/JavaFX。