自定义轮监听器防止 ScrollPane 轮监听器
Custom wheel listener prevent ScrollPane Wheel Listener
我向我的 JPanel 添加了一个自定义的 mousewheellistener,因为我将为此面板实现缩放功能,该功能与 ctrl+mousewheel 一起使用。我的 JPanel 也在 JScrollpane 中。我的问题是;当我将 MouseWheelListener 添加到面板时,即使未按下 Ctrl,鼠标滚轮也无法用于滚动窗格。我要那个;鼠标滚轮在按下 ctrl 时用于缩放,如果不按下它应该用于滚动窗格。我该怎么做?
public class ZoomTest {
public static void main(String[] args) {
JPanel jZoomPanel = new JPanel();
jZoomPanel.setPreferredSize(new Dimension(300, 500));
jZoomPanel.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if(e.isControlDown()) {
// TODO implement zoom
}
}
});
JScrollPane jsc = new JScrollPane(jZoomPanel);
JFrame jDemoFrame = new JFrame();
jDemoFrame.getContentPane().add(jsc);
jDemoFrame.setSize(300, 300);
jDemoFrame.setVisible(true);
}
}
您应该像这样发送事件:
jZoomPanel.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if(e.isControlDown()) {
// TODO implement zoom
} else {
JPanel panel = (JPanel) me.getSource();
MouseEvent newMe = SwingUtilities.convertMouseEvent(panel, me, jsc);
jsc.dispatchEvent(me);
}
}
});
我向我的 JPanel 添加了一个自定义的 mousewheellistener,因为我将为此面板实现缩放功能,该功能与 ctrl+mousewheel 一起使用。我的 JPanel 也在 JScrollpane 中。我的问题是;当我将 MouseWheelListener 添加到面板时,即使未按下 Ctrl,鼠标滚轮也无法用于滚动窗格。我要那个;鼠标滚轮在按下 ctrl 时用于缩放,如果不按下它应该用于滚动窗格。我该怎么做?
public class ZoomTest {
public static void main(String[] args) {
JPanel jZoomPanel = new JPanel();
jZoomPanel.setPreferredSize(new Dimension(300, 500));
jZoomPanel.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if(e.isControlDown()) {
// TODO implement zoom
}
}
});
JScrollPane jsc = new JScrollPane(jZoomPanel);
JFrame jDemoFrame = new JFrame();
jDemoFrame.getContentPane().add(jsc);
jDemoFrame.setSize(300, 300);
jDemoFrame.setVisible(true);
}
}
您应该像这样发送事件:
jZoomPanel.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if(e.isControlDown()) {
// TODO implement zoom
} else {
JPanel panel = (JPanel) me.getSource();
MouseEvent newMe = SwingUtilities.convertMouseEvent(panel, me, jsc);
jsc.dispatchEvent(me);
}
}
});