我看到了JScrollPane.setWheelScrollingEnabled(boolean)
方法,可以开启或禁用鼠标滚轮滚动。不过,有没有方法可以调整滚动速度?在我的观点中,它的速度非常慢。无论我把窗口调整成什么尺寸,每次滚动只移动约三个像素。我希望它比这快得多。
有什么想法吗?
我看到了JScrollPane.setWheelScrollingEnabled(boolean)
方法,可以开启或禁用鼠标滚轮滚动。不过,有没有方法可以调整滚动速度?在我的观点中,它的速度非常慢。无论我把窗口调整成什么尺寸,每次滚动只移动约三个像素。我希望它比这快得多。
有什么想法吗?
你可以尝试这个方法:
myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);
一种方法是将滚动条的单位增量设置为较大的数字:
scrollPane.getVerticalScrollBar().setUnitIncrement(20);
您可以通过设置滚动条的单位增量来实现此功能。请参见示例。
yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);
快速搜索得到了这个页面:如何增加JScrollPane鼠标滚轮的滚动速度。事实证明,滚动增量是滚动条本身的属性(JScrollBar.setUnitIncrement
),而不是滚动面板。
我试图找到一种更好的方法来读取我的ScrollPane中的32000行
试试这个
scrollPane.getVerticalScrollBar().setUnitIncrement(100);
scrollPane.getViewport().putClientProperty("EnableWindowBlit", Boolean.TRUE);
scrollPane.getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);
我加速滚动的解决方案:
添加滚动条参数:
scrollPane.getVerticalScrollBar().putClientProperty("JScrollBar.fastWheelScrolling", true);
实现一个鼠标滚轮监听器(在jViewport内部的组件上):
public void mouseWheelMoved(MouseWheelEvent e) {
boolean isCtrl = (e.getModifiersEx() & MouseWheelEvent.CTRL_DOWN_MASK) != 0;
boolean isShift = (e.getModifiersEx() & MouseWheelEvent.SHIFT_DOWN_MASK) != 0;
MouseWheelEvent eventToDispatch = e;
if (isCtrl || isShift) {
int amountMulti = 1;
int rotMulti = 1;
if (isCtrl) {
amountMulti *= 10;
if (isShift) {
amountMulti *= 5;
rotMulti *= 2;
}
}
int mod = e.getModifiers() & ~InputEvent.CTRL_MASK & ~InputEvent.SHIFT_MASK;
int modEx = e.getModifiersEx() & ~MouseWheelEvent.CTRL_DOWN_MASK & ~MouseWheelEvent.SHIFT_DOWN_MASK;
eventToDispatch = new MouseWheelEvent(this, e.getID(), e.getWhen()
, mod | modEx, e.getX(), e.getY()
, e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger()
, e.getScrollType(), e.getScrollAmount()*amountMulti, e.getWheelRotation()*rotMulti
, e.getPreciseWheelRotation()*amountMulti*rotMulti);
}
getParent().dispatchEvent(eventToDispatch);
}
增加wheelRotation是必要的:否则滚动行数将受限于屏幕大小。
您也可以使用这个。
SwingUtil.setScrollUnitIncrement(yourScrollPane);