Widzę metodę JScrollPane.setWheelScrollingEnabled(boolean)
włączania lub wyłączania przewijania kółkiem myszy. Czy jest jednak sposób na dostosowanie szybkości przewijania? Moim zdaniem jest to absurdalnie powolne. Bez względu na rozmiar okna, przewijanie wynosi około trzech pikseli na kliknięcie. Chciałbym, żeby to było coś więcej.
Jakieś pomysły?
java
swing
scroll
jscrollpane
mousewheel
Erick Robertson
źródło
źródło
Odpowiedzi:
Możesz spróbować tego:
myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);
źródło
Jednym ze sposobów byłoby ustawienie jednostki przyrostu paska przewijania na większą liczbę:
scrollPane.getVerticalScrollBar().setUnitIncrement(20);
źródło
Jeśli chcesz ustawić wielkość przewijania kółkiem myszy niezależnie od ilości jednostek paska przewijania, możesz użyć kontrolera kółka myszy .
źródło
Możesz to zrobić, ustawiając przyrost jednostek dla ScrollBar. Zobacz przykład.
yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);
źródło
Szybkie wyszukiwanie wywołało tę stronę: Jak zwiększyć szybkość przewijania JScrollPane dla użytkowników kółka myszy . Okazuje się, że przyrost przewijania jest własnością samego paska przewijania (
JScrollBar.setUnitIncrement
), a nie panelu przewijania.źródło
Próbowałem znaleźć lepszą metodę czytania 32000 wierszy w moim ScrollPane
Spróbuj tego
scrollPane.getVerticalScrollBar().setUnitIncrement(100); scrollPane.getViewport().putClientProperty("EnableWindowBlit", Boolean.TRUE); scrollPane.getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);
źródło
Aby uzyskać bardziej precyzyjną kontrolę, przewijany komponent może implementować interfejs przewijalny. Pozwala to dynamicznie obliczyć rozmiar jednostki przewijania (przyciski strzałek i klawisze strzałek) oraz rozmiar przewijanego bloku (kółko myszy).
Jak używać paneli przewijania
źródło
Możesz również użyć tego.
SwingUtil.setScrollUnitIncrement(yourScrollPane);
źródło
Moje rozwiązanie przyspieszające przewijanie:
Dodaj parametr paska przewijania:
scrollPane.getVerticalScrollBar (). putClientProperty ("JScrollBar.fastWheelScrolling", true);
Zaimplementuj detektor koła (w komponencie wewnątrz 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); }
Zwiększenie WheelRotation jest konieczne: w przeciwnym razie liczba przewijanych linii będzie ograniczona do rozmiaru ekranu.
źródło