JavaFX TreeTableView

JavaFX TreeTableView

Dans ce tutoriel vous apprendrez à travailler avec le contrôle JavaFX TreeTableView. C’est un contrôle qui permet de visualiser un nombre de lignes, reparties en colonne. Il est très semblable au contrôle TreeView et TableView.

Voici une capture d’écran d’un TreeTableView qui affiche un ensemble de pays:

JavaFX TreeTableView
JavaFX TreeTableView

Création d’un TreeTableView

Pour avoir un TreeTableView il suffit de créer un nouvel objet de la classe TreeTableView de la manière suivant.

TreeTableView<Pays> tableView = new TreeTableView<>();

Nous avons créés un TreeTableView qui se chargera d’afficher un ensemble de pays avec leurs noms et leurs continents. La classe Pays ressemble a ceci:

public class Pays {

    private  String nom;
    private String continent = null;

    public Pays(String nom, String continent) {
        this.nom = nom;
        this.continent = continent;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getContinent() {
        return continent;
    }

    public void setContinent(String continent) {
        this.continent = continent;
    }
}

Notre TreeTableView n’affichera rien pour le moment, car on n’a pas définir le nœud racine de la table arborescente. Nous devons définir le nœud racine et l’ajouter dans notre TreeTableView pour qu’il affiche quelques choses. Le nœud racine c’est celui qu’on va utiliser pour ajouter des éléments à notre TreeTableView.

Définir le nœud racine JavaFX TreeTableView

Pour définir le nœud racine, il suffit de créer un nouvel objet de la classe TreeItem en spécifiant le model de données. La table sera mis à jour lorsqu’on ajoute un enfant à la racine

TreeItem root = new TreeItem(new Pays("Les Pays", ""));
tableView.setRoot(root);

La méthode setRoot() permet d’ajouter la racine dans notre TreeTableView.

Définir les colonnes d’un TreeTableView

La définition des colonnes d’un TreeTableView se fait par l’instanciation de la classe TreeTableColumn de la manière suivante.

TreeTableColumn<Pays, String> column1 = new TreeTableColumn("Nom");
TreeTableColumn<Pays, String> column2 = new TreeTableColumn("Continent");

Le code ci-dessus permet de créer une TreeTableView qui contient deux colonnes : nom et continent.

Ajouter les colonnes JavaFX TreeTableView

Pour ajouter une colonne à la table, on utilise la méthode add sur getColumns. Si vous voulez ajouter plusieurs colonnes à la fois, il suffit d’utiliser addAll sur getColumns.

tableView.getColumns().add(column1);
tableView.getColumns().add(column2);
tableView.getColumns().addAll(column1,column2);

Récupérer le contenu

La récupération de la valeur se fait par la méthode setCellValueFactory. C’est elle qui va se charger de déterminer la valeur d’une cellule dans une ligne. Cette valeur sera spécifiée à l’aide de la classe TreeItemPropertyValueFactory.

column1.setCellValueFactory(new TreeItemPropertyValueFactory<>("nom"));
column2.setCellValueFactory(new TreeItemPropertyValueFactory<>("prenom"));

Voici un exemple de code complet qui affiche un TreeTableView avec deux colonnes. Ces deux colonnes représentent le nom et le continent d’un Pays

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.cell.TreeItemPropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ExampleTreeTableView extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        VBox hBox = new VBox();
        TreeTableView<Pays> tableView = new TreeTableView<>();
        TreeTableColumn<Pays, String> column1 = new TreeTableColumn("Nom");
        TreeTableColumn<Pays, String> column2 = new TreeTableColumn("Continent");
        column1.setCellValueFactory(new TreeItemPropertyValueFactory<>("nom"));
        column2.setCellValueFactory(new TreeItemPropertyValueFactory<>("continent"));
        column1.setPrefWidth(200);

//        tableView.getColumns().add(column1);
//        tableView.getColumns().add(column2);
        tableView.getColumns().addAll(column1, column2);

        TreeItem root = new TreeItem(new Pays("Les Pays en europe", ""));
        TreeItem pays1 = new TreeItem(new Pays("Jean", "France"));
        TreeItem pays2 = new TreeItem(new Pays("Dumont", "Allemagne"));
        TreeItem pays3 = new TreeItem(new Pays("Andrew", "Italie"));

        root.getChildren().addAll(pays1, pays3, pays3);
        tableView.setRoot(root);
        hBox.getChildren().add(tableView);
        Scene scene = new Scene(hBox, 500, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

JavaFX TreeTableView
JavaFX TreeTableView

Un exemple de code complet qui affiche plusieurs groupe de pays.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.cell.TreeItemPropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ExampleTreeTableView extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        VBox hBox = new VBox();
        TreeTableView<Pays> tableView = new TreeTableView<>();
        TreeTableColumn<Pays, String> column1 = new TreeTableColumn("Nom");
        TreeTableColumn<Pays, String> column2 = new TreeTableColumn("Continent");
        column1.setCellValueFactory(new TreeItemPropertyValueFactory<>("nom"));
        column2.setCellValueFactory(new TreeItemPropertyValueFactory<>("continent"));
        column1.setPrefWidth(200);

//        tableView.getColumns().add(column1);
//        tableView.getColumns().add(column2);
        tableView.getColumns().addAll(column1, column2);

        TreeItem root = new TreeItem(new Pays("Les Pays en Europe", ""));
        TreeItem pays1 = new TreeItem(new Pays("France", "Europe"));
        TreeItem pays2 = new TreeItem(new Pays("Allemagne", "Europe"));
        TreeItem pays3 = new TreeItem(new Pays("Italie", "Europe"));

        TreeItem root1 = new TreeItem(new Pays("Pays en Amérique", ""));
        TreeItem pays4 = new TreeItem(new Pays("Canada", "Amérique"));
        TreeItem pays5 = new TreeItem(new Pays("États-Unis", "Amérique"));
        TreeItem pays6 = new TreeItem(new Pays("Haïti", "Amérique"));
        root1.getChildren().addAll(pays4, pays5, pays6);
        root.getChildren().addAll(pays1, pays3, pays3);

        TreeItem base = new TreeItem(new Pays("Tous les Pays", ""));
        base.getChildren().addAll(root, root1);
        tableView.setRoot(base);
        hBox.getChildren().add(tableView);
        Scene scene = new Scene(hBox, 500, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

JavaFX TreeTableView

En conclusion

Un TreeTableView c’est un TableView qui contient une arborescence d’éléments dans sa colonne la plus à gauche.

Lien que vous pouvez Voir

Laisser un commentaire

%d blogueurs aiment cette page :