13 36 Show Dialog2
Nous reprenons le code du showNewItemDialog. Au lieu de construire le root manuellement, nous utilisons fxmlLoader.load() pour charger le FXML et nous l'attachons au DialogPane via dialog.getDialogPane().setContent(fxmlLoader.load()). Ensuite, nous récupérons le contrôleur grâce à fxmlLoader.getController() et appelons une méthode processResults() à écrire dans le DialogController.
Identifiants et méthode processResults
Dans le FXML du dialogue, nous ajoutons trois identifiants : fx:id="descriptionField" sur le TextField, fx:id="detailsArea" sur le TextArea et fx:id="deadlinePicker" sur le DatePicker. Côté Java, dans DialogController, nous déclarons les champs correspondants annotés @FXML private TextField descriptionField, @FXML private TextArea detailsArea et @FXML private DatePicker deadlinePicker.
Nous écrivons la méthode public void processResults(). Elle récupère la description avec descriptionField.getText().trim(), les détails de la même façon depuis detailsArea, et la deadline avec deadlinePicker.getValue(). Avec ces trois valeurs, nous obtenons l'instance du Singleton et appelons TodoData.getInstance().addTodoItem(new TodoItem(description, details, deadlineValue)).
Comme la méthode addTodoItem n'existe pas encore dans TodoData, nous l'ajoutons : public void addTodoItem(TodoItem item) qui fait simplement todoItems.add(item). De retour dans le contrôleur principal, nous appelons DialogController controller = fxmlLoader.getController() puis controller.processResults(). Une erreur subsiste à l'exécution, qui sera corrigée dans la prochaine vidéo.
En résumé
Cette leçon poursuit l'implémentation d'une boîte de dialogue JavaFX pour créer des éléments de tâches. Elle explique comment charger un contrôleur FXML, ajouter des identifiants aux champs (TextField, TextArea, DatePicker), et créer une méthode pour traiter les résultats saisis par l'utilisateur. Le processus implique la récupération des données du formulaire, la création d'un nouvel élément TodoItem et son ajout à la liste de données via la méthode add() nouvellement implémentée.
Points clés
- Utiliser FXMLLoader.load() pour charger le contenu d'une boîte de dialogue plutôt que de passer directement la racine
- Ajouter des identifiants FXML (fx:id) aux champs de formulaire : descriptionField, detailsArea, dateLimitePicker
- Déclarer les champs avec l'annotation @FXML dans le contrôleur pour établir la liaison automatique
- Implémenter une méthode processResults() qui récupère les valeurs des champs, applique trim() et crée un nouvel objet TodoItem
- Ajouter une méthode addTodoItem(TodoItem) à la classe de données pour intégrer les nouveaux éléments à la liste
Questions fréquentes
Pourquoi utiliser FXMLLoader.load() au lieu de passer directement la racine ?
FXMLLoader.load() permet de charger le contrôleur FXML et d'accéder à son instance via getController(), ce qui est nécessaire pour appeler la méthode processResults() depuis le gestionnaire d'événements du contrôleur principal.
Quel est le rôle de la méthode processResults() ?
La méthode processResults() collecte les données saisies dans les champs du formulaire (description, détails, date limite), les nettoie avec trim(), crée un nouvel objet TodoItem et l'ajoute à la liste de données via TodoData.getInstance().addTodoItem().
Pourquoi utiliser trim() sur les champs texte ?
La méthode trim() supprime les espaces inutiles au début et à la fin de la chaîne de texte, garantissant que les données stockées sont nettoyées des caractères superflus.