Java:JScrollPane在按下ctrl键时禁用滚动
我想在按住ctrl键的同时,禁用JScrollPane中的鼠标滚轮滚动。 按ctrl键并移动控制盘时,您将放大/缩小并滚动面板,这不是我想要的 以下是工作代码:Java:JScrollPane在按下ctrl键时禁用滚动,java,swing,mouseevent,jscrollpane,Java,Swing,Mouseevent,Jscrollpane,我想在按住ctrl键的同时,禁用JScrollPane中的鼠标滚轮滚动。 按ctrl键并移动控制盘时,您将放大/缩小并滚动面板,这不是我想要的 以下是工作代码: scroller = new JScrollPane(view); scroller.removeMouseWheelListener(scroller .getMouseWheelListeners()[0]); scroller.addMouseWheelListener(new Mo
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);
}
}
});
scroller=newjscrollpane(视图);
scroller.removeMouseWheelListener(scroller
.getMouseWheelListeners()[0]);
scroller.addMouseWheelListener(新的MouseWheelListener(){
已移动公共无效鼠标滚轮(最终鼠标滚轮事件){
如果(例如isControlDown()){
如果(如getWheelRotation()<0){
//变焦+
}否则{
//变焦-
}
}否则如果(如IsShift Down()){
//水平滚动
可调整的调整=getScroller().getHorizontalScrollBar();
int scroll=e.getUnitsToScroll()*adj.getBlockIncrement();
adj.setValue(adj.getValue()+滚动);
}否则{
//垂直滚动
可调整的调整=getScroller().getVerticalScrollBar();
int scroll=e.getUnitsToScroll()*adj.getBlockIncrement();
adj.setValue(adj.getValue()+滚动);
}
}
});
编辑我的问题并自己解决。
如果您有任何调整,请告诉我 看一看。您将无法使用确切的代码,但您应该能够使用类的概念
该代码用自定义侦听器替换默认的MouseWheelListener。然后,它使用一个不同的参数重新创建事件,并将事件重新修补到默认侦听器
在您的情况下,您不需要创建新事件,您只需要防止任何带有控件修饰符的事件被重新分配到默认侦听器,而是调用您在问题中发布的代码。为了临时禁用滚动,您可以操纵滚动条的单位增量值,分别重新恢复 只需将按键侦听器添加到“查看端口”面板,并对按下的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);
}
});
不是很有用,我编辑了我的原始代码,并在没有使用新类的情况下解决了我的问题。@user1076625如果是,请将其作为答案发布,并接受它。将答案附加到问题后不是正确的方法。干杯@user1076625,您的代码做了很多假设。您假设只有一个鼠标滚轮侦听器。您假设从未使用第一个侦听器的任何默认功能。如果这是您的需求,那么很好,但不要说这个建议没有用,因为它演示了一种更好的方法,可以从所有潜在的侦听器中只删除特定的功能。另外,看起来你复制了我的建议来删除侦听器。唯一的区别是您没有将它们重新添加到中。是否有任何方法可以对tableView滚动窗格执行相同的操作?