2010-04-28 3 views
0

J'ai plusieurs listes de lecture sidebyside. J'ai un moyen de m'assurer que le "selectedIndex" est le même sur tous, mais y a-t-il un moyen de faire en sorte que la barre de défilement soit TOUJOURS synchronisée? Il semble que les barres de défilement seront synchronisées tant que l'utilisateur utilise les touches fléchées lors de la navigation dans la liste. Cependant, si l'utilisateur ferme la touche ou utilise la souris, elles ne seront pas synchronisées du tout. .Est-il possible de synchroniser les barres de défilement dans un ListView JavaFX 1.2?

+0

Si vous voulez avoir deux vues de liste avec selectedIndex toujours les mêmes et la position de défilement étant toujours la même, qu'est-ce qui vous empêche de créer une seule vue de liste? – Honza

Répondre

0

Malheureusement, cela n'est pas possible, même en 1.3 il n'y a pas d'accès à la barre de défilement interne et il est également possible de configurer une barre de défilement personnalisée. Si vous le pouvez, déposez un problème avec JavaFX Runtime décrivant votre cas d'utilisation. http://javafx-jira.kenai.com

0

question ancienne, mais dans le cas où quelqu'un est intéressé: Je vais maintenant utiliser la classe ci-dessous (Testé FX2.2) pour synchroniser le défilement de 2 listviews:

package fx.scrollbars; 

import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.geometry.Orientation; 
import javafx.scene.Node; 
import javafx.scene.control.ListView; 
import javafx.scene.control.ScrollBar; 

/** 
* Created by JRD on 03/03/2015. 
*/ 
public class ScrollbarsBinding { 

public static final int BIND_BIDIRECTIONAL = 3; 
public static final int BIND_RIGHT_TO_LEFT = 1; 
public static final int BIND_LEFT_TO_RIGHT = 2; 

/** 
* Bidirectional binding of 2 ListView's scrollbars. 
*/ 
public static void bind(ListView lv1, ListView lv2) { 
    bind(lv1, lv2, BIND_BIDIRECTIONAL); 
} 

/** 
* Allows binding of 2 ListView's scrollbars. 
* @param lv1 left list view 
* @param lv2 right list view 
* @param bindType 3 binding possibilities : BIND_BIDIRECTIONAL=bidirectional, BIND_RIGHT_TO_LEFT and BIND_LEFT_TO_RIGHT 
*/ 
public static void bind(ListView lv1, ListView lv2, int bindType) { 
    ScrollBar bar1 = null; 
    ScrollBar bar2 = null; 

    for (Node node : lv1.lookupAll(".scroll-bar")) { 
     if (node instanceof ScrollBar && ((ScrollBar)node).getOrientation().equals(Orientation.VERTICAL)) { 
      bar1 = (ScrollBar)node; 
     } 
    } 
    for (Node node : lv2.lookupAll(".scroll-bar")) { 
     if (node instanceof ScrollBar && ((ScrollBar)node).getOrientation().equals(Orientation.VERTICAL)) { 
      bar2 = (ScrollBar)node; 
     } 
    } 
    if (bar1 == null || bar2 == null) return; 

    final ScrollBar fbar1 = bar1; 
    final ScrollBar fbar2 = bar2; 
    if (fbar1 != null && (bindType & BIND_RIGHT_TO_LEFT) != 0) { 
     fbar1.valueProperty().addListener(new ChangeListener<Number>() { 
      @Override 
      public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { 
       fbar2.setValue(newValue.doubleValue()); 
      } 
     }); 
    } 
    if (fbar2 != null && (bindType & BIND_LEFT_TO_RIGHT) != 0) { 
     fbar2.valueProperty().addListener(new ChangeListener<Number>() { 
      @Override 
      public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { 
       fbar1.setValue(newValue.doubleValue()); 
      } 
     }); 
    } 
} 

// TODO: other JavaFx components ? 
} 

Je viens d'appeler ce code :

ScrollbarsBinding.bind(listView1, listView2); 
Questions connexes