Comment puis-je accélérer la vitesse de défilement dans un JScrollPane lorsque vous utilisez la molette de la souris?

Je vois la méthode JScrollPane.setWheelScrollingEnabled(boolean) pour activer ou désactiver le défilement de la molette de la souris. Est-il possible d’ajuster la vitesse du défilement? C’est, à mon avis, ridiculement lent. Quelle que soit la taille de la fenêtre, le défilement est d’environ trois pixels par clic. Je voudrais que ce soit beaucoup plus que ça.

Des idées?

Vous pouvez essayer ceci:

 myJScrollPane.getVerticalScrollBar().setUnitIncrement(16); 

Une manière serait de définir l’incrément d’unité de la barre de défilement à un plus grand nombre:

 scrollPane.getVerticalScrollBar().setUnitIncrement(20); 

Si vous souhaitez définir la valeur de défilement de la molette de la souris indépendamment de l’unité de la barre de défilement, vous pouvez utiliser le contrôleur de molette de la souris .

Vous pouvez le faire en définissant l’incrément d’unité pour un ScrollBar. Voir l’exemple.

 yourScrollPane.getVerticalScrollBar().setUnitIncrement(16); 

Une recherche rapide a amené cette page: Comment augmenter la vitesse de défilement de JScrollPane pour les utilisateurs de molette de commande . Il s’avère que l’incrément de défilement est une propriété de la barre de défilement même ( JScrollBar.setUnitIncrement ) et non du volet de défilement.

J’essayais de trouver une meilleure méthode pour lire 32 000 lignes dans mon ScrollPane

essaye ça

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

Vous pouvez également utiliser ceci.

SwingUtil.setScrollUnitIncrement(yourScrollPane);

Ma solution pour accélérer le parchemin:

  1. Ajouter le paramètre de la barre de défilement:

    scrollPane.getVerticalScrollBar (). putClientProperty (“JScrollBar.fastWheelScrolling”, true);

  2. Implémenter un programme d’écoute de roue (sur le composant à l’intérieur de 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); } 

    L’augmentation de wheelRotation est nécessaire: sinon le nombre de lignes défilées sera limité à la taille de l’écran.