我想在按下ctrl的同时禁用我的JScrollPane中的鼠标滚轮滚动。 当您按下ctrl并移动滚轮时,您将放大/缩小并滚动面板,这不是我想要的。
这是工作代码:
scroller = new JScrollPane(view);
scroller.removeMouseWheelListener(scroller
.getMouseWheelListeners()[0]);
scroller.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(final MouseWheelEvent e) {
if (e.isControlDown()) {
if (e.getWheelRotation() < 0) {
// Zoom +
} else {
// Zoom -
}
} else if (e.isShiftDown()) {
// Horizontal scrolling
Adjustable adj = getScroller().getHorizontalScrollBar();
int scroll = e.getUnitsToScroll() * adj.getBlockIncrement();
adj.setValue(adj.getValue() + scroll);
} else {
// Vertical scrolling
Adjustable adj = getScroller().getVerticalScrollBar();
int scroll = e.getUnitsToScroll() * adj.getBlockIncrement();
adj.setValue(adj.getValue() + scroll);
}
}
});
编辑我的问题并自己解决。 如果你有任何调整,请告诉我!
答案 0 :(得分:2)
看看Mouse Wheel Controller。您将无法使用确切的代码,但您应该能够使用该类的概念。
代码用自定义侦听器替换默认的MouseWheelListener。然后,它使用一个不同的参数重新创建事件,将事件重新分配给默认侦听器。
在您的情况下,您不需要创建一个新事件,您只需要阻止任何带有Control修饰符的事件被重新分配到默认侦听器,而是调用您在问题中发布的代码。
答案 1 :(得分:1)
为了暂时禁用滚动,您可以操纵滚动条的单位增量值,并分别再次恢复。
只需将一个键监听器添加到视图端口面板,然后按下Ctrl键:
editorPane.addKeyListener(new KeyAdapter(){
@Override
public void keyPressed(KeyEvent e) {
if ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0)
getVerticalScrollBar().setUnitIncrement(0);
else
getVerticalScrollBar().setUnitIncrement(15);
}
@Override
public void keyReleased(KeyEvent e) {
if ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0)
getVerticalScrollBar().setUnitIncrement(0);
else
getVerticalScrollBar().setUnitIncrement(15);
}
});