簡體   English   中英

Java - MouseWheelEvent觸發兩次

[英]Java - MouseWheelEvent triggers twice

我正在開發一個JFrame,該程序的一個功能是使用鼠標的滾輪在窗口中縮放圖像。 我已經實現了一個MouseAdapter,它被添加為JFrame本身的MouseWheelListener。

/**
 * Handles scroll wheel activity.
 */
private MouseAdapter wheelListener = new MouseAdapter() {
    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {
        int notches = e.getWheelRotation();
        System.out.println(notches);
        while (notches > 0) {
            controller.zoomIn();
            notches--;
        }
        while (notches < 0) {
            controller.zoomOut();
            notches++;
        }
    }
};

在JFrame構造函數中:

public MainFrame() {
    ...
    addMouseWheelListener(wheelListener);
    ...
}

我遇到的問題是滾動滾輪時每次“點擊”都會觸發兩次事件。 我無法找到有類似問題的人。

我嘗試在mouseWheelMoved方法中放置if(e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { ... }以查看是否發生了兩種不同類型的事件,但它們都是WHEEL_UNIT_SCROLL's

我也嘗試打印出事件的來源,看看它是來自不同的窗口/窗格,但是它們都來自我的主JFrame窗口。

有誰知道,或者可以發現,為什么我得到兩個事件,當我應該得到一個?

編輯:在添加輪監聽器部分中輸入錯誤的行,抱歉。 編輯:經過一些測試,我能夠使用.hashCode()來驗證有兩個獨特的MouseWheelEvents 我懷疑MouseAdapter會以某種方式添加兩次。 我將它添加到MainFrame的構造函數中,並驗證它只在那里發生一次。

添加e.consume()解決了這個問題。

private MouseAdapter wheelListener = new MouseAdapter() {
    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {
        e.consume() // avoid the event to be triggred twice
        int notches = e.getWheelRotation();
        System.out.println(notches);
        while (notches > 0) {
            controller.zoomIn();
            notches--;
        }
        while (notches < 0) {
            controller.zoomOut();
            notches++;
        }
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM