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


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

какие идеи?

8 86

8 ответов:

вы можете попробовать это :

myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);

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

scrollPane.getVerticalScrollBar().setUnitIncrement(20);

Если вы хотите установить количество прокрутки колесика мыши независимо от единицы прокрутки amout, вы можете использовать Контроллер Колесика Мыши.

вы можете сделать это, установив единичное приращение для полосы прокрутки. Смотрите пример.

yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);

быстрый поиск вывел эту страницу:Как увеличить скорость прокрутки JScrollPane для пользователей колесика мыши. Получается, что приращение прокрутки является свойством самой полосы прокрутки (JScrollBar.setUnitIncrement), а не панель прокрутки.

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

попробуй такое

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

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

SwingUtil.setScrollUnitIncrement(yourScrollPane);

мое решение для ускорения прокрутки:

  1. добавить параметр прокрутки:

    scrollPane.getVerticalScrollBar ().putClientProperty("JScrollBar.fastWheelScrolling", true);

  2. реализовать прослушиватель колеса (на компоненте внутри 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);
    }
    

    увеличение колесной ориентации необходимо: в противном случае количество прокручиваемых линий будет ограничено размером экрана.