Как ускорить скорость прокрутки в JScrollPane при использовании колеса мыши?

Я вижу метод JScrollPane.setWheelScrollingEnabled(boolean) для включения или отключения прокрутки колесика мыши. Есть ли способ настроить скорость прокрутки? Это, на мой взгляд, смехотворно медленно. Независимо от того, какой размер я делаю в окне, прокрутка составляет около трех пикселей за клик. Я бы хотел, чтобы это было намного больше.

Любые идеи?

Ответ 1

Вы можете попробовать следующее:

myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);

Ответ 2

Один из способов - установить приращение устройства в полосе прокрутки на большее число:

scrollPane.getVerticalScrollBar().setUnitIncrement(20);

Ответ 3

Если вы хотите установить количество прокрутки колесика мыши, независимо от диапазона полосы прокрутки, вы можете использовать Mouse Wheel Controller.

Ответ 4

Вы можете сделать это, установив приращение устройства для ScrollBar. См. Пример.

yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);

Ответ 6

Я пытался найти лучший метод для чтения через 32000 строк в ScrollPane

попробуйте это

scrollPane.getVerticalScrollBar().setUnitIncrement(100); scrollPane.getViewport().putClientProperty("EnableWindowBlit", Boolean.TRUE); scrollPane.getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);

Ответ 7

Вы также можете использовать это.

SwingUtil.setScrollUnitIncrement(yourScrollPane);

Ответ 8

Мое решение ускорить прокрутку:

  • Добавить параметр прокрутки:

    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: в противном случае количество прокрученных строк будет ограничено размером экрана.