13 34 DialogPane2
Nous remplissons le GridPane du dialogue avec un Label "Description" en columnIndex=0, rowIndex=0, suivi d'un TextField pour la saisie. Pour les détails, nous ajoutons un Label "Details" en ligne 1 et un TextArea à côté, car les détails peuvent contenir du texte libre. Enfin, un Label "Deadline" en ligne 2 est associé à un DatePicker. Les boutons OK et Annuler seront ajoutés via le code, en utilisant les ButtonType prédéfinis de JavaFX.
Le handler showNewItemDialog
Le code du dialogue est géré par le Controller de la fenêtre principale. Nous ajoutons donc une méthode public void showNewItemDialog() annotée @FXML, juste sous initialize. Quand l'utilisateur clique sur File > New, nous voulons faire apparaître la boîte. La première étape consiste à instancier la classe : Dialog<ButtonType> dialog = new Dialog<>(). Par défaut, ce dialogue est modal : l'utilisateur ne peut pas interagir avec la fenêtre principale tant qu'il ne l'a pas fermé.
Il est conseillé de définir le propriétaire (owner) du dialogue, généralement la fenêtre qui l'ouvre. Pour cela, nous donnons un identifiant fx:id="mainBorderPane" au BorderPane principal. Dans le Controller, nous déclarons @FXML private BorderPane mainBorderPane portant le même nom. Nous récupérons ensuite la fenêtre parente via mainBorderPane.getScene().getWindow() et la passons à dialog.initOwner(...).
Créer une instance de Dialog ne charge pas notre FXML. Nous utilisons donc un FXMLLoader comme dans la classe Main, dans un bloc try/catch qui capture IOException avec un message "Couldn't load the dialog". Une fois le root chargé, nous l'attachons avec dialog.getDialogPane().setContent(root). La suite verra comment finaliser ce chargement et brancher les boutons.
En résumé
Cette leçon montre comment construire une boîte de dialogue (DialogPane) en JavaFX avec plusieurs champs de formulaire : un champ de texte pour la description, une zone de texte pour les détails, et un sélecteur de date pour la date limite. Elle explique comment charger l'interface depuis un fichier FXML et configurer la boîte de dialogue en tant que composant modal qui bloque l'interaction avec le reste de l'application.
Points clés
- Création d'une DialogPane avec labels et composants (TextField, TextArea, DatePicker) organisés dans un GridPane à l'aide de rowIndex et columnIndex
- Concept de boîte de dialogue modale : l'utilisateur ne peut interagir qu'avec la boîte de dialogue et doit la fermer avant d'accéder à l'interface principale
- Chargement du fichier FXML dans le contrôleur via FXMLLoader.load() et application du contenu à la DialogPane avec setContent()
- Configuration du propriétaire (owner) de la boîte de dialogue en récupérant la fenêtre parente via BorderPane.getScene().getWindow()
- Gestion des événements du contrôleur principal pour afficher la boîte de dialogue (méthode showNewItemDialog avec annotation @FXML)
Questions fréquentes
Qu'est-ce qu'une boîte de dialogue modale en JavaFX ?
Une boîte de dialogue modale est une fenêtre qui bloque l'interaction avec le reste de l'application tant qu'elle est ouverte. L'utilisateur doit la fermer en cliquant sur OK, Annuler ou le bouton de fermeture avant de pouvoir interagir à nouveau avec la fenêtre principale.
Comment charge-t-on un fichier FXML dans une DialogPane ?
On utilise FXMLLoader.load() avec le chemin du fichier FXML (dans un bloc try-catch pour gérer les IOException), puis on définit le contenu de la DialogPane avec setContent(root) où root est le composant racine chargé.
À quoi sert de définir le propriétaire (owner) d'une boîte de dialogue ?
Définir le propriétaire avec dialog.initOwner(window) lie la boîte de dialogue à la fenêtre parente, ce qui permet à JavaFX de bloquer les interactions avec les autres parties de l'application et de gérer correctement la modalité de la boîte.