13 33 DialogPane
Dans la classe Controller, nous pouvons maintenant supprimer tout le code lié à la création et au stockage des éléments codés en dur, ainsi que la ligne temporaire qui appelait setTodoItems. Nous gardons l'appel à setAll mais à la place de la liste locale, nous passons TodoData.getInstance().getTodoItems(). Les données viennent désormais du fichier via le Singleton. Comme la méthode setTodoItems n'est plus utilisée, nous pouvons la commenter dans TodoData.
Ajouter un menu File
En relançant l'application, la liste affiche bien les éléments lus depuis le fichier. Nous allons maintenant offrir à l'utilisateur un moyen d'ajouter de nouveaux TodoItems via un menu placé en haut du BorderPane. Dans le fichier FXML principal, nous ajoutons une balise top contenant une MenuBar. Telle quelle, la barre n'apparaît pas tant qu'aucun menu n'y est ajouté.
Nous ajoutons donc <Menu text="File">. Le menu apparaît, mais cliquer dessus n'ouvre encore rien tant qu'aucun sous-élément n'y est défini. À l'intérieur, nous insérons une balise <items>, puis un MenuItem de texte "New", un SeparatorMenuItem, et enfin un second MenuItem "Exit". Au lancement, le mini-menu apparaît correctement avec ses deux entrées.
Pour l'instant, cliquer sur "New" ou "Exit" ne déclenche rien : nous n'avons pas encore branché de gestionnaire d'événement. Dans la prochaine vidéo, nous écrirons le handler associé à "New" qui ouvrira une boîte de dialogue permettant à l'utilisateur de saisir la description, les détails et la deadline d'un nouveau TodoItem.
En résumé
Cette leçon explique comment créer une boîte de dialogue (DialogPane) en JavaFX pour collecter les informations d'une nouvelle tâche (description, détails, date limite). Le DialogPane est un gestionnaire de mise en page spécialisé qui accepte quatre propriétés : header, graphic, content et buttons, avec des variantes textuelles (headerText, contentText) pour simplifier l'affichage de texte. L'implémentation requiert un nouveau fichier FXML associé à un contrôleur distinct, puis l'intégration d'un GridPane pour aligner les labels et champs de saisie de manière professionnelle.
Points clés
- DialogPane est un gestionnaire de mise en page dédié aux dialogues qui accepte 4 propriétés : header, graphic, content et buttons
- Les propriétés textuelle (headerText, contentText) facilitent l'affichage de texte sans créer de Label, mais la propriété non-textuelle a la priorité en cas de double assignation
- Chaque dialogue nécessite un fichier FXML séparé (une seule racine par fichier) et son propre contrôleur, distinct de la fenêtre principale
- GridPane organise efficacement les contrôles en lignes et colonnes pour aligner les labels avec les champs (TextField, TextArea, DatePicker)
- Les paramètres hgap et vgap du GridPane définissent l'espacement horizontal et vertical entre les éléments du dialogue
Questions fréquentes
Pourquoi ne pas créer la DialogPane dans le même fichier FXML que la fenêtre principale ?
Chaque fichier FXML ne peut avoir qu'une seule racine, ce qui correspond à un seul graphe de scène. Comme le dialogue possède un graphe de scène différent de la fenêtre principale, il faut créer un fichier FXML et un contrôleur séparés.
Quelle est la différence entre les propriétés textuelle et non-textuelle du DialogPane ?
Les propriétés textuelle (headerText, contentText) acceptent des chaînes de caractères, tandis que les propriétés non-textuelles (header, content) acceptent des contrôles. Si les deux sont définies, la propriété non-textuelle a la priorité.
Pourquoi utiliser un GridPane pour le contenu du dialogue ?
Un GridPane permet d'aligner proprement les labels avec les champs de saisie en les organisant en lignes et colonnes, offrant une meilleure présentation que des contrôles disposés librement.