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

Java Swing 滑鼠事件與滾輪事件監聽實作

     編輯:Java 相關知識

Java Swing 滑鼠鍵盤事件完整範例

本範例示範如何在 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();
    }
}

事件介面對照表

介面方法觸發時機
MouseListenermouseClicked滑鼠按下並釋放(完整點擊)
mousePressed滑鼠按下瞬間
mouseReleased滑鼠釋放瞬間
mouseEntered滑鼠進入元件邊界
mouseExited滑鼠離開元件邊界
MouseWheelListenermouseWheelMoved滾輪滾動

進階應用提示

  • 區分點擊與雙擊:使用 e.getClickCount() == 2 判斷雙擊。
  • 取得座標:e.getX(), e.getY()(相對元件);e.getPoint() 回傳 Point 物件。
  • 滾輪精細控制:e.getPreciseWheelRotation() 回傳 double,支援高解析度滾輪。
  • 事件消費:若不想讓事件繼續傳遞,可呼叫 e.consume()。

常見錯誤

  1. 忘記向正確元件註冊監聽(如:滾輪應向視窗或滾動面板註冊,而非按鈕)。
  2. 在事件處理中執行耗時操作導致 UI 凍結,應委派給背景執行緒。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved