Search code examples
javaswingjscrollpanejscrollbar

Smoother scrolling in a JScrollPane


Using a JScrollPane's scrollbar arrows to scroll (or by setting up key bindings for the arrow keys) moves the viewport one increment, pauses, then scrolls smoothly. Most scrollbars I've encountered behave the same; there's a slight movement, a pause, and then faster continuous scrolling. Is there any way to avoid the pause, so that scrolling is smooth from start to finish?


Solution

  • The BasicScrollBarUI is responsible for setting up the timer that does the scrolling.

    private final static int scrollSpeedThrottle = 60; // delay in milli seconds
    ...
    scrollListener = createScrollListener();
    scrollTimer = new Timer(scrollSpeedThrottle, scrollListener);
    scrollTimer.setInitialDelay(300);  // default InitialDelay?
    

    You can see that the repeat rate is faster than the initial delay.

    So I would guess you need to create a custom scrollbar UI and override that code.