[英]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.