2009-05-13 7 views
1

J'ai une application qui affiche un ScrolledComposite. Les utilisateurs se plaignent que l'incrément de défilement horizontal est trop fin, c'est-à-dire que chaque clic sur la flèche de défilement horizontal déplace actuellement la barre d'un pixel à la fois. Ils veulent des clics individuels pour provoquer un plus grand mouvement horizontal. Quelqu'un pourrait-il expliquer comment je pourrais mettre en œuvre cela? Un extrait du code suit:Comment modifier l'incrément de défilement horizontal d'un défilement?

ScrolledComposite myScrolledComposite = new ScrolledComposite(parent, 
     SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 

if (myScrolledComposite == null) { 
    throw new NullPointerException("ScenePreView.java: " + 
      "Method createPartControl() " + 
      "ScrolledComposite myScrolledComposite == null."); 
} 

Composite myComposite = new Composite(myScrolledComposite, SWT.NONE); 

if (myComposite == null) { 
    throw new NullPointerException("ScenePreView.java: " + 
      "Method createPartControl() " + 
      "Composite myComposite == null."); 
} 

myScrolledComposite.setContent(myComposite); 
+0

Êtes-vous sûr que le sensetivity est pas défini dans le système d'exploitation? – willcodejavaforfood

Répondre

0

Utilisez la méthode setIncrement() de la classe de barre de défilement SWT. Cela vous permet de modifier le degré de déplacement de la région de défilement lorsque vous appuyez sur les boutons fléchés. Obtient la barre de défilement du composite et définit son incrément. See API Reference for SWT

+0

Merci. J'ai regardé dans la classe ScrolledComposite, mais je n'ai pas pensé à regarder dans la classe Scrollbar. –

2

myScrolledComposite.getVerticalBar(). SetIncrement (10);

+0

Merci. Cela a fait l'affaire. –

0

Je sais que c'est plus que ce que vous avez demandé, mais je vous recommande fortement de vérifier le SWT animation toolkit qui a une implémentation de défilement lisse. Cela rendra votre application bien plus fraîche.

Vous pouvez vérifier et voir les sources - c'est un bon exemple (encore un peu avancé) de la façon de jouer avec le défilement.

+0

Je vais vérifier. Merci. –

3

Cela devrait fonctionner plutôt bien et fournir des valeurs par défaut utilisables. Il devrait se mettre à jour automatiquement lorsque le contrôle à l'intérieur du ScrolledComposite est redimensionné.

myComposite.addControlListener(new ControlAdapter() { 
    @Override 
    public void controlResized(ControlEvent e) { 
     ScrollBar sbX = scrolledComposite.getHorizontalBar(); 
     if (sbX != null) { 
      sbX.setPageIncrement(sbX.getThumb()); 
      sbX.setIncrement(Math.max(1, sbX.getThumb()/5)); 
     } 
    } 
}); 
+0

Merci. Fonctionne très bien. –

Questions connexes