IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
logo

FAQ JavaFXConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 507, derni�re mise � jour : 2 novembre 2016  Ajouter une question

 

Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur le forum JavaFX de http://java.developpez.com ainsi que l'exp�rience personnelle des auteurs.

Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.

SommaireSceneGraphInterface utilisateurContr�lesContr�les virtualis�sTreeView (6)
pr�c�dent sommaire suivant
 

Pour ajouter des valeurs dans un TreeView, il faut les placer dans des instances de la classe javafx.scene.control.TreeItem<T> de mani�re � former une arborescence. Ici, T est le type des donn�es affich�es dans l'arbre. La racine de cette arborescence doit �tre ensuite plac�e dans la propri�t� root de l'arbre graphique.

Par exemple :

Code Java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
final TreeItem<String> fruitItem = new TreeItem<>("Fruits"); 
fruitItem.getChildren().setAll( 
        new TreeItem("Fraise"), 
        new TreeItem("Pomme"), 
        new TreeItem("Poire") 
); 
fruitItem.setExpanded(true); 
final TreeItem<String> vegetableItem = new TreeItem<>("L�gumes"); 
vegetableItem.getChildren().setAll( 
        new TreeItem("Artichaut"), 
        new TreeItem("Laitue"), 
        new TreeItem("Radis") 
); 
vegetableItem.setExpanded(true); 
final TreeItem<String> treeRoot = new TreeItem<>("Fruits & l�gumes"); 
treeRoot.setExpanded(true); 
treeRoot.getChildren().setAll(fruitItem, vegetableItem); 
treeView.setRoot(treeRoot);

Ce qui nous donne :

Mis � jour le 30 septembre 2014 bouye

Pour ajouter des sous-n�uds dans un TreeItem, il faut cr�er un nouvel objet TreeItem pour chaque sous-n�ud et les ajouter dans sa liste observable chidlren.

Par exemple :

Code java : S�lectionner tout
item.getChildren().setAll(subItem1, subItem2, subItem3, subItem4);

Pour retirer des sous-n�uds d'un TreeItem, il suffit de les retirer de cette m�me liste observable children.

Mis � jour le 30 septembre 2014 bouye

Pour d�plier une branche dans un TreeView, il suffit de r�cup�rer le TreeItem correspondant au n�ud de la branche et modifier la valeur de sa propri�t� expanded en lui donnant la valeur true.

Par exemple :

Code Java : S�lectionner tout
item.setExpanded(true);

Mis � jour le 30 septembre 2014 bouye

Pour savoir si un TreeItem dans un TreeView est une feuille (il n'y a pas de sous-n�uds dans cette branche), il suffit d'interroger sa propri�t� en lecture seule leaf. Cette propri�t� retourne la valeur true quand le n�ud est une feuille.

Code Java : S�lectionner tout
1
2
if (item.isLeaf()) {  
    ...

On peut aussi v�rifier la taille ou le contenu de la liste observable children du TreeItem.

Mis � jour le 30 septembre 2014 bouye

Pour cacher la racine du TreeView, il faut modifier la valeur de sa propri�t� showRoot et lui donner la valeur false.

Par exemple :

Code Java : S�lectionner tout
treeView.setShowRoot(false);

Le n�ud racine de l'arbre ne sera alors pas affich�, mais ses sous-n�uds seront affich�s quant � eux.

Mis � jour le 30 septembre 2014 bouye

Pour changer l'apparence des objets contenus dans un TreeView, nous avons besoin de faire appel � l'API Cell. En effet, l'affichage par d�faut n'est pas tr�s engageant :



Commen�ons par coder un affichage simple :

Code Java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class SimpleCarTreeCell extends TreeCell { 
  
    @Override 
    protected void updateItem(Object item, boolean empty) { 
        super.updateItem(item, empty); 
        setText(null); 
        if (!empty && item != null) { 
            if (item instanceof Car) { 
                final Car car = (Car) item; 
                final String text = String.format("%s %s", car.getBrand(), car.getModel()); 
                setText(text); 
            } else { 
                setText(item.toString()); 
            } 
        } 
    } 
}

Ici, la cellule �tend TreeCell au lieu de TreeCell<Car>, car notre arbre contient des donn�es h�t�roclites de plusieurs types distincts : certains n�uds contiennent des chaines de caract�res tandis que d'autres contiennent des instances de la classe Car.

Nous devons ensuite sp�cifier la fabrique � cellules qui sera utilis�e dans l'arbre :

Code Java : S�lectionner tout
1
2
3
4
5
6
7
treeView.setCellFactory(new Callback<TreeView, TreeCell>() { 
  
    @Override 
    public TreeCell call(TreeView tv) { 
        return new SimpleCarTreeCell(); 
    } 
});

Ou :

Code Java : S�lectionner tout
treeView.setCellFactory(tv -> new SimpleCarTreeCell());

Ce qui nous donne :



Ici, d�sormais, nous affichons le mod�le et la marque de la voiture.

Nous allons maintenant utiliser un affichage plus riche qui va afficher une photo du v�hicule, sa couleur, son nombre de si�ges et de portes, etc. :

Code Java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public class RichCarTreeCell extends TreeCell { 
  
    private final GridPane gridPane = new GridPane(); 
    private final ImageView brandIcon = new ImageView(); 
    private final Label brandLabel = new Label(); 
    private final Label modelLabel = new Label(); 
    private final Rectangle colorRect = new Rectangle(10, 10); 
    private final Label descriptionLabel = new Label(); 
    private final ImageView carIcon = new ImageView(); 
    private final AnchorPane content = new AnchorPane(); 
  
    public RichCarTreeCell() { 
        carIcon.setFitWidth(75); 
        carIcon.setPreserveRatio(true); 
        GridPane.setConstraints(carIcon, 0, 0, 1, 3); 
        GridPane.setValignment(carIcon, VPos.TOP); 
        // 
        modelLabel.setStyle("-fx-font-weight: bold; -fx-font-size: 1.5em;"); 
        GridPane.setConstraints(modelLabel, 1, 0); 
        // 
        brandLabel.setStyle("-fx-font-size: 0.9em; -fx-font-style: italic; -fx-opacity: 0.5;"); 
        GridPane.setConstraints(brandLabel, 2, 0); 
        // 
        brandIcon.setFitWidth(22); 
        brandIcon.setPreserveRatio(true); 
        GridPane.setConstraints(brandIcon, 3, 0); 
        GridPane.setValignment(brandIcon, VPos.CENTER); 
        // 
        colorRect.setStroke(Color.BLACK); 
        descriptionLabel.setStyle("-fx-opacity: 0.75;"); 
        descriptionLabel.setGraphic(colorRect); 
        GridPane.setConstraints(descriptionLabel, 1, 1); 
        GridPane.setColumnSpan(descriptionLabel, Integer.MAX_VALUE); 
        //         
        gridPane.getColumnConstraints().add(new ColumnConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.NEVER, HPos.LEFT, true)); 
        gridPane.getColumnConstraints().add(new ColumnConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.ALWAYS, HPos.LEFT, true)); 
        gridPane.getColumnConstraints().add(new ColumnConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.NEVER, HPos.LEFT, true)); 
        gridPane.getColumnConstraints().add(new ColumnConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.NEVER, HPos.LEFT, true)); 
        gridPane.getRowConstraints().add(new RowConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.NEVER, VPos.CENTER, true)); 
        gridPane.getRowConstraints().add(new RowConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.NEVER, VPos.CENTER, true)); 
        gridPane.getRowConstraints().add(new RowConstraints(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE, Priority.ALWAYS, VPos.CENTER, true)); 
        gridPane.setHgap(6); 
        gridPane.setVgap(6); 
        gridPane.getChildren().setAll(carIcon, modelLabel, brandLabel, brandIcon, descriptionLabel); 
        AnchorPane.setTopAnchor(gridPane, 0d); 
        AnchorPane.setLeftAnchor(gridPane, 0d); 
        AnchorPane.setBottomAnchor(gridPane, 0d); 
        AnchorPane.setRightAnchor(gridPane, 0d); 
        content.getChildren().add(gridPane); 
    } 
  
//    private Node fxmlContent; 
//    private final RichCarListCellController fxmlController; 
    @Override 
    protected void updateItem(Object item, boolean empty) { 
        super.updateItem(item, empty); 
        setGraphic(null); 
        setText(null); 
        setContentDisplay(ContentDisplay.LEFT); 
        if (!empty && item != null) { 
            if (item instanceof Car) { 
                final Car car = (Car) item; 
                brandLabel.setText(car.getBrand()); 
                modelLabel.setText(car.getModel()); 
                brandIcon.setImage(car.getBrandImage()); 
                carIcon.setImage(car.getCarImage()); 
                descriptionLabel.setText(String.format(", %d places, %d portes", car.getSeats(), car.getDoors())); 
                colorRect.setFill(car.getColor()); 
                setText(null); 
                setGraphic(content); 
                setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
            } else { 
                setText(item.toString()); 
            } 
        } 
    } 
}

Et rempla�ons la fabrique � cellules de notre arbre :

Code Java : S�lectionner tout
1
2
3
4
5
6
7
treeView.setCellFactory(new Callback<TreeView, TreeCell>() {  
  
    @Override  
    public TreeCell call(TreeView tv) {  
        return new RichCarTreeCell();  
    }  
});

Ou :

Code Java : S�lectionner tout
treeView.setCellFactory(tv -> new RichCarTreeCell());

Ce qui nous donne :



Note : les photos et logos affich�s ici sont directement li�s depuis les articles Wikip�dia des v�hicules et compagnies mentionn�es.

Ici, nous avons d�sormais un affichage bien plus complexe pour chaque entr�e de notre liste de voitures.

Mis � jour le 30 septembre 2014 bouye

Proposer une nouvelle r�ponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire suivant
 

Les sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.