我正在开发一个swing 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);
...
}
我遇到的问题是,滚动滚轮时,每次“点击”事件都会触发两次。我找不到有类似问题的人。
我尝试if(e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { ... }
使用该mouseWheelMoved
方法来查看是否发生了两种不同类型的事件,但它们都是WHEEL_UNIT_SCROLL's
.
我还尝试打印出事件的源以查看它是否来自不同的窗口/窗格,但它们都来自我的主 JFrame 窗口。
有谁知道,或者可以发现,为什么我应该得到两个事件,而我应该得到一个?
编辑:在添加轮侦听器部分放错行,对不起。编辑:经过一些测试,我能够用来.hashCode()
验证有两个独特的MouseWheelEvents
. 我怀疑 MouseAdapter 以某种方式被添加了两次。我将它添加到 MainFrame 的构造函数中,并验证它只在那里发生一次。