Rendre JavaFX / TableView modifiable

environnement

Aperçu

L'utilisation de base de la vue de table consiste à associer des lignes à des classes définies par l'utilisateur (modèles de données). L'explication ici est facile à comprendre en se référant à ce qui suit.

AOE Diary: Comment personnaliser les cellules ListView et TableView ORACLE: JavaFX UI Component Operations 13 Table View

Dans cette entrée, nous allons explorer comment la vue de table créée de cette manière est modifiable et ses variations.

Exemple de code

Controller.java Entity.java Main.fxml

0.png

Cellule modifiable de texte

Vous pouvez utiliser TextFieldTableCell pour rendre le texte d'une cellule modifiable.

1.png

Lorsque vous utilisez TextFieldTableCell, modifiez CellFactory de TableColumn par défaut. Notez que ** ne peut être modifié que si les propriétés modifiables TableView et TableColumn sont définies sur true **. (Il peut également être modifiable dans Scene Builder)

Controller.java


tableView.setEditable(true);
column1.setEditable(true);
column1.setCellFactory(TextFieldTableCell.forTableColumn());

TextFieldTableCell a un mécanisme pour basculer le composant affiché sur TextField par ** ON / OFF ** dans l'état d'édition.

StringConverter StringConverter fournit un mécanisme pour convertir des chaînes en d'autres classes.

Ce StringConverter est requis si le type de propriété est autre que String. StringConverter a de nombreuses implémentations pour chaque type à convertir, vous pouvez donc choisir parmi elles à utiliser. Package javafx.util.converter

//Lors de la modification de colonnes de type booléen sous forme de texte
column3.setCellFactory(TextFieldTableCell.forTableColumn(new BooleanStringConverter()));

Cellules modifiables sélectionnables

Vous pouvez utiliser «ChoiceBoxTableCell», «ComboBoxTableCell» pour rendre une cellule sélectionnable et modifiable. ChoiceBox ne fournit pas de fonction de défilement pour les choix, donc il ne convient pas quand il y a beaucoup de choix.

ChoiceBox 3_.png

ComboBox 4.png

Controller.java


// ChoiceBox
column2.setCellFactory(ChoiceBoxTableCell.forTableColumn("Item1", "Item2", "Item3"));
// ComboBox
column2.setCellFactory(ComboBoxTableCell.forTableColumn("Item1", "Item2", "Item3"));

De même, ceux-ci ont également un mécanisme pour basculer le composant affiché sur ChoiceBox, ComboBox en activant / désactivant l'état d'édition.

Basculer la cellule modifiable

Vous pouvez rendre les cellules modifiables en utilisant CheckBoxTableCell. Cette cellule n'a pas d'état d'édition et vous pouvez modifier sa valeur en un seul clic.

5.png

Controller.java


column3.setCellFactory(CheckBoxTableCell.forTableColumn(column3));

Cellule personnalisée modifiable

Créons une cellule personnalisée qui affiche le standard JavaFX ColorPicker lors de l'édition. Lorsqu'il n'est pas modifié, le volet vide est rempli.

6.png

ColorPickerTableCell.java

column4.setCellFactory(ColorPickerTableCell.forTableColumn());

L'image de transition approximative est la suivante. Si vous pouvez comprendre le moment où le contrôle d'affichage est commuté par setGraphic et le mécanisme qui commitEdit est appelé dans le sélecteur de couleur ʻOnAction`, je pense qu'il peut être appliqué à d'autres contrôles.

edit2.png

Cellule personnalisée qui n'utilise pas l'état d'édition

J'essaierai également d'afficher le sélecteur de couleur en plaçant le contrôle directement sans utiliser l'état d'édition. Je pense que ce modèle est généralement implémenté en tant que cellule personnalisée. C'est similaire à la case à cocher ci-dessus.

7.png

DirectColorPickerTableCell.java

column4.setCellFactory(DirectColorPickerTableCell.forTableColumn());

Puisque l'état d'édition n'est pas utilisé, la valeur du modèle de données est réécrite directement à partir de ʻOnAction` du sélecteur de couleurs.

C'est bien car le mécanisme est simple et il est facile pour l'utilisateur de savoir qu'il peut être édité, mais il faut noter que les commandes lourdes alignées sur l'écran augmentent la charge.

Liste de cellules intégrée

Il existe différents types de cellules intégrées introduites au début, comme pour les arbres et les listes ainsi que pour les tableaux. C'est une bonne idée de vérifier avant de créer une cellule personnalisée. Package javafx.scene.control.cell

référence

[Light Lab: Customize JavaFX Cell](http://krr.blog.shinobi.jp/javafx/javafx%20%E3%82%BB%E3%83%AB%E3%81%AE%E3%82% AB% E3% 82% B9% E3% 82% BF% E3% 83% 9E% E3% 82% A4% E3% 82% BA) Source: GitHub FXML: GitHub

Recommended Posts

Rendre JavaFX / TableView modifiable