本範例示範如何在 Swing 應用程式中實作 MouseListener 與 MouseWheelListener,偵測滑鼠左/中/右鍵點擊、滑鼠進入/離開元件區域、以及滾輪滾動並動態調整視窗大小。
package demo;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MouseDemo extends JFrame implements MouseListener, MouseWheelListener {
private int width = 400;
private int height = 400;
public MouseDemo() {
JPanel panel = new JPanel();
JButton btn = new JButton("Click Me");
panel.add(btn);
add(panel);
setSize(width, height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
// 為按鈕註冊滑鼠點擊監聽
btn.addMouseListener(this);
// 為視窗註冊滾輪監聽
addMouseWheelListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
int button = e.getButton();
if (button == MouseEvent.BUTTON1) {
System.out.println("左鍵點擊");
} else if (button == MouseEvent.BUTTON2) {
System.out.println("中鍵(滾輪)點擊");
} else if (button == MouseEvent.BUTTON3) {
System.out.println("右鍵點擊");
}
}
@Override public void mousePressed(MouseEvent e) {}
@Override public void mouseReleased(MouseEvent e) {}
@Override public void mouseEntered(MouseEvent e) {}
@Override public void mouseExited(MouseEvent e) {}
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
int rotation = e.getWheelRotation(); // 正值:向前/向下;負值:向後/向上
if (rotation > 0) {
width += 10; height += 10;
System.out.println("滾輪向前 → 視窗放大");
} else {
width -= 10; height -= 10;
System.out.println("滾輪向後 → 視窗縮小");
}
setSize(width, height);
validate(); // 重新佈局
}
public static void main(String[] args) {
new MouseDemo();
}
}
| 介面 | 方法 | 觸發時機 |
|---|---|---|
| MouseListener | mouseClicked | 滑鼠按下並釋放(完整點擊) |
| mousePressed | 滑鼠按下瞬間 | |
| mouseReleased | 滑鼠釋放瞬間 | |
| mouseEntered | 滑鼠進入元件邊界 | |
| mouseExited | 滑鼠離開元件邊界 | |
| MouseWheelListener | mouseWheelMoved | 滾輪滾動 |
e.getClickCount() == 2 判斷雙擊。e.getX(), e.getY()(相對元件);e.getPoint() 回傳 Point 物件。e.getPreciseWheelRotation() 回傳 double,支援高解析度滾輪。e.consume()。