Dans ce tutoriel vous apprendrez à créer une table en utilisant la classe TableView JavaFX. Vous apprendrez à remplir cette table avec des données et la rendre visible.
La classe TableView présente une table de données sous forme de ligne et de colonne. Cette classe fournit par JavaFX nous facilite d’afficher les données sous forme tabulaire en utilisant TableColumn et TableCell.
Créer une TableView JavaFX
La création d’une TableView se fait par l’instanciation d’un objet de la classe TableView. Pour avoir un TableView il suffit de créer un objet de cette classe. Voici un exemple de la création d’une TableView JavaFX.
TableView table = new TableView();
Nous avons créer notre objet TableView. Maintenant on va voir comment ajouter des colonnes à notre TableView.
Ajouter des colonnes
Un TableView se compose d’un ensemble de ligne et de colonnes. les colonnes d’une table permet d’identifier les informations qui sont dans notre table car chaque colonne d’une table fait référence à une information bien déterminée. Par exemple: Si vous souhaitez stocker des employés dans une table, il est important d’avoir un ensemble d’attribut qui l’identifient. Par exemple: son nom, son prénom et son sexe etc… Ces informations la sera constitués les colonnes de votre table.
TableColumn nom = new TableColumn("Nom");
TableColumn prenom = new TableColumn("Prenom");
TableColumn sexe = new TableColumn("Sexe");
table.getColumns().addAll(nom,prenom,sexe);
Nous avons définit nos différentes colonnes grâce à la classe TableColumn et ajouté les colonnes à notre table en utilisant la méthode getColumns() de la classe TableView.
Maintenant nous allons associer notre TableView à une scène de graphe pour qu’il soit visible. Voici un exemple.
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class FXTableView extends Application {
@Override
public void start(Stage primaryStage) {
TableView table = new TableView();
table.setEditable(true);
TableColumn nom = new TableColumn("Nom");
TableColumn prenom = new TableColumn("Prenom");
TableColumn sexe = new TableColumn("Sexe");
table.getColumns().addAll(nom,prenom,sexe);
StackPane root = new StackPane();
root.getChildren().add(table);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Nous avons créé notre premier TableView, mais notre elle n’a pas de contenu. Il nous faut ajouter du contenu à notre Table.
Ajouter de données
Pour ajouter du contenu dans une TableView JavaFX, il est recommander d’implémenter une classe qui définie le model de données. Pour cela on va créer une classe Employé pour faire ce travail.
import javafx.beans.property.SimpleStringProperty;
public class Employe {
private final SimpleStringProperty nom;
private final SimpleStringProperty prenom;
private final SimpleStringProperty sexe;
Employe(String nom, String prenom, String sexe) {
this.nom = new SimpleStringProperty(nom);
this.prenom = new SimpleStringProperty(prenom);
this.sexe = new SimpleStringProperty(sexe);
}
public String getNom() {
return this.nom.get();
}
public void setNom(String nom) {
this.nom.set(nom);
}
public String getPrenom() {
return this.prenom.get();
}
public void setPrenom(String prenom) {
this.prenom.set(prenom);
}
public String getSexe() {
return this.sexe.get();
}
public void setSexe(String sexe) {
this.sexe.set(sexe);
}
}
Notre classe employé est créé et cette classe représente notre model de données. Maintenant nous allons créer une ObserVableList dans laquelle nous allons stocker autant de ligne d’informations qui sera afficher dans notre table. Voici un exemple
final ObservableList<Employe> data = FXCollections.observableArrayList(
new Employe("Jacques", "Mickael", "Masculin"),
new Employe("Rock", "Jameson", "Femini"),
new Employe("Richard", "Wili", "Masculin"),
new Employe("Jean", "Christ", "Femini"),
new Employe("Pierre", "Ronel", "Masculin")
);
Maintenant nous allons associer les informations de nos employés aux colonnes du tableau et les affichées dans la table. Chaque colonne de notre tableau représente une information sur les employés.
colnom.setCellValueFactory(
new PropertyValueFactory<Employe, String>("nom"));
colprenom.setCellValueFactory(
new PropertyValueFactory<Employe, String>("prenom"));
colsexe.setCellValueFactory(
new PropertyValueFactory<Employe, String>("sexe"));
table.setItems(data);
Dans l’exemple précédent on a utilisé la méthode setCellValueFactory .Cette méthode spécifie les données des cellules pour chaque colonne de la table. L’implémentation se fait grâce à la classe PropertyValueFactory. Cette classe utilise les propriétés de la classe Employé pour remplir les colonne du tableau tout en référant vers les méthodes correspondants.
Voici un exemple complet qui affiche les données dans notre tableaux. Vous pouvez seulement ajouter la classe personne qu’on à créé précédemment dans ce code, ou de la créer dans un fichier à part.
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class FXTableView extends Application {
TableView table = new TableView();
final ObservableList<Employe> data = FXCollections.observableArrayList(
new Employe("Jacques", "Mickael", "Masculin"),
new Employe("Rock", "Jameson", "Femini"),
new Employe("Richard", "Wili", "Masculin"),
new Employe("Jean", "Christ", "Femini"),
new Employe("Pierre", "Ronel", "Masculin")
);
@Override
public void start(Stage primaryStage) {
table.setEditable(true);
TableColumn colnom = new TableColumn("Nom");
TableColumn colprenom = new TableColumn("Prenom");
TableColumn colsexe = new TableColumn("Sexe");
colnom.setMinWidth(99);
colprenom.setMinWidth(99);
colsexe.setMinWidth(99);
colnom.setCellValueFactory(
new PropertyValueFactory<Employe, String>("nom"));
colprenom.setCellValueFactory(
new PropertyValueFactory<Employe, String>("prenom"));
colsexe.setCellValueFactory(
new PropertyValueFactory<Employe, String>("sexe"));
table.setItems(data);
table.getColumns().addAll(colnom, colprenom, colsexe);
StackPane root = new StackPane();
root.getChildren().add(table);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("TableView JavaFX");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}