I see the method JScrollPane.setWheelScrollingEnabled(boolean)
to enable or disable the mouse wheel scrolling. Is there any way to adjust the speed of the scro
For more precise control, the component being scrolled can implement the Scrollable interface. This allows you to dynamically calculate the scrolling unit size (arrow buttons and arrow keys) and the scrolling block size (mouse wheel).
How to use Scroll Panes
My solution to speeding up the scroll:
Add scrollbar's parameter:
scrollPane.getVerticalScrollBar().putClientProperty("JScrollBar.fastWheelScrolling", true);
Implement a wheel listener (on the component inside 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);
}
The increase of wheelRotation is necessary: otherwise the number of scrolled lines will be limited to the size of the screen.
You can try this :
myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);
A quick search brought up this page: How to increase the JScrollPane scrolling speed for mousewheel users. It turns out that the scrolling increment is a property of the scroll bar itself (JScrollBar.setUnitIncrement
) and not the scroll pane.
If you want to set the mouse wheel scroll amount indepedent of the scrollbar unit amout you can use the Mouse Wheel Controller.
You can also use this.
SwingUtil.setScrollUnitIncrement(yourScrollPane);