我在 Swing 中制作了一个简单的 GUI,在 JScrollPane 内、JSPlitPane 内、JPanel 内、......在 JFrame 内有一个大的 JPanel(显示一个大的 BufferedImage)。
当直接从 Eclipse IDE 运行/显示我的 JFrame 时,JScrollPane 正确接收鼠标滚轮事件并在我滚动鼠标滚轮时滚动。
但是从 Matlab 运行时(我已经构建了一个 JAR),当我滚动鼠标滚轮时,JScrollPane 不会滚动。
我尝试使用一些 syso 手动添加 mousewheellistener 来调试/理解问题,如下所示:
jscrollpane.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
System.err.println("jscrollpane mouse wheel event");
}
});
jsplitpane.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
System.err.println("jsplitpane mouse wheel event");
}
});
直接从 Eclipse IDE 运行时,会显示“jscrollpane 鼠标滚轮事件”(可以)。但是当从 Matlab 运行我的 GUI 时,它会显示“jsplitpane 鼠标滚轮事件”。
我还添加了这段代码以确保我的 jscrollpane 有一个 mousewheellistener:
for (MouseWheelListener listener : jscrollpane.getMouseWheelListeners()) {
System.err.println("ONE LISTENER FOR JSCROLLPANE");
}
它显示了两次(一次用于我的 syso 侦听器,一次用于 jscrollpane 组件的内置鼠标滚轮侦听器)。
那么在 Matlab 中 JScrollPane 组件会发生什么?我可以做些什么来强制 JscrollPane 接收 MouseWheel 事件?
我认为 Matlab 更新了一般的 awt 掩码事件以防止 jscrollpane 捕获鼠标滚轮事件?