我正在做一個swing JFrame,並且程序的其中一個功能是使用鼠標的滾輪在窗口中縮放圖像。我已經實現了一個MouseAdapter,它被添加爲JFrame本身的MouseWheelListener。Java - MouseWheelEvent觸發兩次
/**
* 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);
...
}
我遇到的問題是,事件觸發兩次,每次「點擊」滾動滾輪時。我無法找到任何有類似問題的人。
我試着將if(e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { ... }
放在mouseWheelMoved
方法中,看看是否有兩種不同類型的事件發生,但它們都是。
我也嘗試打印出事件的來源,看它是否來自不同的窗口/窗格,但他們都從我的主要JFrame窗口。
有沒有人知道,或可以發現,爲什麼我得到兩個事件,當我應該得到一個?
編輯:在添加車輪監聽器部分放錯了行,對不起。 編輯:經過一些測試,我能夠使用.hashCode()
來驗證有兩個獨特的MouseWheelEvents
。我懷疑MouseAdapter會以某種方式添加兩次。我將它添加到MainFrame的構造函數中,並驗證它只發生在那裏。
當我在我的[sscce](http://sscce.org)中試過你的代碼時,它工作正常。您是否多次添加偵聽器?考慮創建併發佈一個[sscce](http://sscce.org),它向我們展示了您的問題。 –
另外,當你的問題與WindowListeners無關時,爲什麼向我們展示'addWindowListener(...)'位? –
'「我猜想MouseAdapter會以某種方式添加兩次。」:正如我懷疑的那樣。你也沒有顯示有問題的代碼。 –