↑
CHAPITRE 3.1

Les conteneurs essentiels (Layouts)

Découvrir les principaux layouts JavaFX pour organiser vos interfaces avec Scene Builder
Dans cette section, vous allez découvrir les cinq layouts essentiels de JavaFX : HBox, VBox, BorderPane, GridPane et AnchorPane. Ces conteneurs sont les outils de base pour organiser et structurer vos interfaces. Vous apprendrez à les utiliser avec Scene Builder pour créer des interfaces professionnelles et bien organisées. Toutes les interfaces seront créées visuellement dans Scene Builder, sans écrire de code pour créer les conteneurs.

3.1Les conteneurs essentiels (Layouts)

3.1.1 – HBox

Le HBox (Horizontal Box) est un conteneur qui organise ses éléments enfants horizontalement, c'est-à-dire cÎte à cÎte, de gauche à droite. C'est l'un des layouts les plus simples et les plus utilisés pour créer des barres d'outils, des boutons alignés, ou des éléments disposés en ligne.

🎯 Qu'est-ce qu'un HBox ?

Le HBox est un conteneur qui :

  • Organise horizontalement : Place les Ă©lĂ©ments enfants les uns Ă  cĂŽtĂ© des autres, de gauche Ă  droite
  • GĂšre automatiquement l'espacement : Permet de dĂ©finir un espacement uniforme entre les Ă©lĂ©ments
  • GĂšre l'alignement : Permet d'aligner les Ă©lĂ©ments verticalement (haut, centre, bas)
  • Redimensionne automatiquement : Les Ă©lĂ©ments peuvent s'Ă©tirer pour remplir l'espace disponible
Analogie : Le HBox est comme une Ă©tagĂšre horizontale oĂč vous placez des objets cĂŽte Ă  cĂŽte. Tous les objets sont alignĂ©s sur la mĂȘme ligne.

📐 Cas d'utilisation du HBox

Le HBox est particuliĂšrement utile pour :

  • Barres d'outils : Aligner des boutons ou des icĂŽnes horizontalement
  • Formulaires : Placer un Label Ă  cĂŽtĂ© d'un TextField
  • Boutons d'action : Grouper plusieurs boutons (Annuler, Valider, etc.)
  • ÉlĂ©ments de navigation : CrĂ©er une barre de navigation horizontale
  • Statistiques : Afficher plusieurs valeurs cĂŽte Ă  cĂŽte
Exemple d'interface avec HBox
Exemple d'interface utilisant un HBox
Les trois boutons (Nouveau, Ouvrir, Enregistrer) sont alignés horizontalement dans un HBox avec un espacement uniforme.

đŸ› ïž CrĂ©er un HBox dans Scene Builder

Voici comment créer et configurer un HBox dans Scene Builder :

Étape 1 : Ajouter un HBox

  1. Ouvrez Scene Builder
  2. Dans le panneau Library, trouvez la catégorie Containers
  3. Glissez-déposez un HBox dans la zone de conception
  4. Le HBox apparaßt comme un rectangle avec des bordures pointillées
Note : Si vous créez un nouveau fichier FXML, vous pouvez choisir HBox comme élément racine lors de la création.

Étape 2 : Configurer les propriĂ©tĂ©s du HBox

Sélectionnez le HBox et configurez ses propriétés dans l'inspecteur :

  • Spacing : Espacement en pixels entre les Ă©lĂ©ments enfants (ex: 10)
  • Alignment : Alignement vertical des Ă©lĂ©ments (TOP_LEFT, CENTER, BOTTOM_RIGHT, etc.)
  • Padding : Marge intĂ©rieure autour du contenu (dans l'onglet Layout)
  • Pref Width / Pref Height : Taille prĂ©fĂ©rĂ©e du conteneur

Étape 3 : Ajouter des Ă©lĂ©ments dans le HBox

Pour ajouter des composants dans le HBox :

  1. Glissez-déposez des composants (Label, Button, TextField, etc.) depuis la Library dans le HBox
  2. Les composants s'alignent automatiquement horizontalement
  3. Vous pouvez réorganiser l'ordre en glissant les éléments dans la vue hiérarchique

📝 Exemple pratique : Barre d'outils avec HBox

Créons une barre d'outils simple avec plusieurs boutons alignés horizontalement :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine (pour avoir de l'espace pour d'autres éléments)
  2. Glissez un HBox dans le VBox
  3. Sélectionnez le HBox et configurez :
    • Spacing : 10
    • Padding : 10 (dans l'onglet Layout)
    • Alignment : CENTER
  4. Ajoutez trois Button dans le HBox :
    • Premier bouton : Text = "Nouveau"
    • DeuxiĂšme bouton : Text = "Ouvrir"
    • TroisiĂšme bouton : Text = "Enregistrer"
Résultat visuel :
Vous obtenez une barre d'outils avec trois boutons alignés horizontalement, espacés de 10 pixels, avec un padding de 10 pixels autour, et centrés dans le HBox.

Exemple

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.*?>

<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <HBox spacing="10" alignment="CENTER">
         <padding>
            <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
         </padding>
         <children>
            <Button text="Nouveau"/>
            <Button text="Ouvrir"/>
            <Button text="Enregistrer"/>
         </children>
      </HBox>
   </children>
</VBox>
Explication du code FXML :
‱ <HBox spacing="10" alignment="CENTER"> : CrĂ©e un HBox avec un espacement de 10 pixels et un alignement centrĂ©
‱ <padding><Insets .../></padding> : DĂ©finit un padding de 10 pixels sur tous les cĂŽtĂ©s
‱ <children> : Contient les trois boutons qui seront alignĂ©s horizontalement
‱ Les boutons sont ajoutĂ©s dans l'ordre : "Nouveau", "Ouvrir", "Enregistrer"

⚙ PropriĂ©tĂ©s importantes du HBox

Voici les propriétés les plus utilisées pour configurer un HBox dans Scene Builder :

Propriétés de base (onglet Properties)

  • Spacing : Espacement horizontal entre les Ă©lĂ©ments (en pixels)
  • Pref Width : Largeur prĂ©fĂ©rĂ©e du conteneur
  • Pref Height : Hauteur prĂ©fĂ©rĂ©e du conteneur

Propriétés de layout (onglet Layout)

  • Alignment : Alignement vertical des Ă©lĂ©ments (TOP_LEFT, TOP_CENTER, TOP_RIGHT, CENTER_LEFT, CENTER, CENTER_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT)
  • Padding : Marge intĂ©rieure (Top, Right, Bottom, Left)

Propriétés des enfants dans le HBox

Quand vous sélectionnez un élément enfant du HBox, vous pouvez configurer :

  • Hgrow : Permet Ă  l'Ă©lĂ©ment de s'Ă©tirer horizontalement (NEVER, ALWAYS, SOMETIMES)
  • Margin : Marge autour de l'Ă©lĂ©ment spĂ©cifique
Hgrow expliqué :
‱ NEVER : L'Ă©lĂ©ment garde sa taille naturelle
‱ ALWAYS : L'Ă©lĂ©ment s'Ă©tire pour remplir l'espace disponible
‱ SOMETIMES : L'Ă©lĂ©ment s'Ă©tire seulement si nĂ©cessaire

💡 Bonnes pratiques avec HBox

  • Utilisez un spacing cohĂ©rent : Choisissez un espacement uniforme (ex: 10px) pour une apparence professionnelle
  • Pensez au padding : Ajoutez du padding pour Ă©viter que les Ă©lĂ©ments touchent les bords
  • Alignez verticalement : Utilisez l'alignement pour centrer ou aligner les Ă©lĂ©ments selon vos besoins
  • Combinez avec d'autres layouts : Un HBox peut contenir d'autres layouts (VBox, GridPane, etc.) pour des structures complexes
Important : Le HBox organise les Ă©lĂ©ments de gauche Ă  droite dans l'ordre oĂč ils apparaissent dans la vue hiĂ©rarchique. Vous pouvez rĂ©organiser cet ordre en glissant les Ă©lĂ©ments dans la hiĂ©rarchie.

🔄 HBox vs autres layouts

Comparons le HBox avec d'autres layouts similaires :

  • HBox vs VBox : HBox organise horizontalement, VBox organise verticalement
  • HBox vs FlowPane : HBox place les Ă©lĂ©ments en une seule ligne, FlowPane peut passer Ă  la ligne suivante si nĂ©cessaire
  • HBox vs GridPane : HBox est linĂ©aire, GridPane permet une organisation en grille bidimensionnelle

3.1.2 – VBox

Le VBox (Vertical Box) est un conteneur qui organise ses éléments enfants verticalement, c'est-à-dire les uns en dessous des autres, de haut en bas. C'est le layout le plus couramment utilisé pour créer des formulaires, des listes d'éléments, ou des interfaces organisées en colonnes verticales.

🎯 Qu'est-ce qu'un VBox ?

Le VBox est un conteneur qui :

  • Organise verticalement : Place les Ă©lĂ©ments enfants les uns en dessous des autres, de haut en bas
  • GĂšre automatiquement l'espacement : Permet de dĂ©finir un espacement uniforme entre les Ă©lĂ©ments
  • GĂšre l'alignement : Permet d'aligner les Ă©lĂ©ments horizontalement (gauche, centre, droite)
  • Redimensionne automatiquement : Les Ă©lĂ©ments peuvent s'Ă©tirer pour remplir l'espace disponible
Analogie : Le VBox est comme une pile de livres sur une étagÚre. Tous les livres sont empilés verticalement, un au-dessus de l'autre.

📐 Cas d'utilisation du VBox

Le VBox est particuliĂšrement utile pour :

  • Formulaires : Organiser des champs de saisie verticalement (Label, TextField, Button)
  • Listes d'Ă©lĂ©ments : Afficher une sĂ©rie d'Ă©lĂ©ments empilĂ©s
  • Panneaux de configuration : Organiser des options de configuration
  • Cartes de contenu : CrĂ©er des cartes avec titre, contenu et actions
  • Structure principale : Organiser la structure gĂ©nĂ©rale d'une fenĂȘtre
Exemple d'interface avec VBox
Exemple d'interface utilisant un VBox
Formulaire de connexion avec les éléments empilés verticalement : titre, champs de saisie et boutons organisés dans un VBox.

đŸ› ïž CrĂ©er un VBox dans Scene Builder

Voici comment créer et configurer un VBox dans Scene Builder :

Étape 1 : Ajouter un VBox

  1. Ouvrez Scene Builder
  2. Dans le panneau Library, trouvez la catégorie Containers
  3. Glissez-déposez un VBox dans la zone de conception
  4. Le VBox apparaßt comme un rectangle avec des bordures pointillées
Note : Le VBox est souvent utilisé comme élément racine d'un fichier FXML car il permet une organisation verticale naturelle de l'interface.

Étape 2 : Configurer les propriĂ©tĂ©s du VBox

Sélectionnez le VBox et configurez ses propriétés dans l'inspecteur :

  • Spacing : Espacement en pixels entre les Ă©lĂ©ments enfants (ex: 15)
  • Alignment : Alignement horizontal des Ă©lĂ©ments (TOP_LEFT, CENTER, TOP_RIGHT, etc.)
  • Padding : Marge intĂ©rieure autour du contenu (dans l'onglet Layout)
  • Pref Width / Pref Height : Taille prĂ©fĂ©rĂ©e du conteneur

Étape 3 : Ajouter des Ă©lĂ©ments dans le VBox

Pour ajouter des composants dans le VBox :

  1. Glissez-déposez des composants (Label, TextField, Button, etc.) depuis la Library dans le VBox
  2. Les composants s'alignent automatiquement verticalement
  3. Vous pouvez réorganiser l'ordre en glissant les éléments dans la vue hiérarchique

📝 Exemple pratique : Formulaire de connexion avec VBox

Créons un formulaire de connexion simple avec des champs organisés verticalement :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Sélectionnez le VBox et configurez :
    • Spacing : 15
    • Padding : 20 (dans l'onglet Layout)
    • Alignment : CENTER
    • Pref Width : 300
  3. Ajoutez les composants suivants dans l'ordre :
    • Un Label : Text = "Connexion", style avec une grande police
    • Un Label : Text = "Nom d'utilisateur"
    • Un TextField : Pref Width = 250
    • Un Label : Text = "Mot de passe"
    • Un PasswordField : Pref Width = 250
    • Un HBox (pour aligner les boutons horizontalement) :
      • Spacing = 10
      • Contient deux Button : "Annuler" et "Connexion"
Résultat visuel :
Vous obtenez un formulaire de connexion bien organisé avec tous les éléments empilés verticalement, centrés, avec un espacement uniforme de 15 pixels entre chaque élément, et un padding de 20 pixels autour.

Exemple

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.*?>

<VBox spacing="15" alignment="CENTER" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1">
   <padding>
      <Insets top="20.0" right="20.0" bottom="20.0" left="20.0"/>
   </padding>
   <children>
      <Label text="Connexion" style="-fx-font-size: 24px; -fx-font-weight: bold;"/>
      <Label text="Nom d'utilisateur"/>
      <TextField prefWidth="250.0" promptText="Entrez votre nom d'utilisateur"/>
      <Label text="Mot de passe"/>
      <PasswordField prefWidth="250.0" promptText="Entrez votre mot de passe"/>
      <HBox spacing="10.0" alignment="CENTER">
         <children>
            <Button text="Annuler"/>
            <Button text="Connexion"/>
         </children>
      </HBox>
   </children>
</VBox>
Explication du code FXML :
‱ <VBox spacing="15" alignment="CENTER"> : CrĂ©e un VBox avec un espacement vertical de 15 pixels et un alignement centrĂ©
‱ <padding> : DĂ©finit un padding de 20 pixels sur tous les cĂŽtĂ©s
‱ Les Ă©lĂ©ments sont empilĂ©s verticalement dans l'ordre : Label titre, Label nom, TextField, Label mot de passe, PasswordField, HBox avec boutons
‱ Le HBox Ă  l'intĂ©rieur permet d'aligner les boutons horizontalement

⚙ PropriĂ©tĂ©s importantes du VBox

Voici les propriétés les plus utilisées pour configurer un VBox dans Scene Builder :

Propriétés de base (onglet Properties)

  • Spacing : Espacement vertical entre les Ă©lĂ©ments (en pixels)
  • Pref Width : Largeur prĂ©fĂ©rĂ©e du conteneur
  • Pref Height : Hauteur prĂ©fĂ©rĂ©e du conteneur

Propriétés de layout (onglet Layout)

  • Alignment : Alignement horizontal des Ă©lĂ©ments (TOP_LEFT, TOP_CENTER, TOP_RIGHT, CENTER_LEFT, CENTER, CENTER_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT)
  • Padding : Marge intĂ©rieure (Top, Right, Bottom, Left)

Propriétés des enfants dans le VBox

Quand vous sélectionnez un élément enfant du VBox, vous pouvez configurer :

  • Vgrow : Permet Ă  l'Ă©lĂ©ment de s'Ă©tirer verticalement (NEVER, ALWAYS, SOMETIMES)
  • Margin : Marge autour de l'Ă©lĂ©ment spĂ©cifique
Vgrow expliqué :
‱ NEVER : L'Ă©lĂ©ment garde sa taille naturelle
‱ ALWAYS : L'Ă©lĂ©ment s'Ă©tire pour remplir l'espace disponible verticalement
‱ SOMETIMES : L'Ă©lĂ©ment s'Ă©tire seulement si nĂ©cessaire

💡 Bonnes pratiques avec VBox

  • Utilisez un spacing cohĂ©rent : Choisissez un espacement uniforme (ex: 10-15px) pour une apparence professionnelle
  • Pensez au padding : Ajoutez du padding pour Ă©viter que les Ă©lĂ©ments touchent les bords
  • Centrez le contenu : Utilisez CENTER pour l'alignement pour un rendu Ă©quilibrĂ©
  • Combinez avec HBox : Utilisez des HBox Ă  l'intĂ©rieur d'un VBox pour crĂ©er des lignes horizontales dans une structure verticale
  • Utilisez Vgrow pour les Ă©lĂ©ments flexibles : Si vous voulez qu'un Ă©lĂ©ment prenne tout l'espace disponible, utilisez Vgrow = ALWAYS
Important : Le VBox organise les Ă©lĂ©ments de haut en bas dans l'ordre oĂč ils apparaissent dans la vue hiĂ©rarchique. L'ordre est crucial pour l'apparence finale de votre interface.

🔄 VBox vs autres layouts

Comparons le VBox avec d'autres layouts similaires :

  • VBox vs HBox : VBox organise verticalement, HBox organise horizontalement
  • VBox vs FlowPane : VBox place les Ă©lĂ©ments en une seule colonne, FlowPane peut crĂ©er plusieurs colonnes si nĂ©cessaire
  • VBox vs GridPane : VBox est linĂ©aire, GridPane permet une organisation en grille bidimensionnelle

3.1.3 – BorderPane

Le BorderPane est un conteneur qui divise l'espace en cinq zones distinctes : top (haut), bottom (bas), left (gauche), right (droite) et center (centre). C'est le layout idéal pour créer des interfaces avec une barre de menu en haut, une barre de statut en bas, des panneaux latéraux, et une zone de contenu principale au centre.

🎯 Qu'est-ce qu'un BorderPane ?

Le BorderPane est un conteneur qui :

  • Divise en cinq zones : Top, Bottom, Left, Right, et Center
  • Organise automatiquement : Chaque zone a un rĂŽle spĂ©cifique et une position fixe
  • GĂšre le redimensionnement : La zone center prend tout l'espace disponible
  • Permet des zones optionnelles : Vous n'ĂȘtes pas obligĂ© de remplir toutes les zones
Analogie : Le BorderPane est comme une fenĂȘtre avec des cadres : un cadre en haut (barre de menu), un cadre en bas (barre de statut), des cadres sur les cĂŽtĂ©s (panneaux), et une grande zone centrale (contenu principal).

📐 Cas d'utilisation du BorderPane

Le BorderPane est particuliĂšrement utile pour :

  • Applications principales : Structure standard d'une application avec menu, contenu et statut
  • Éditeurs : Zone d'Ă©dition centrale avec barres d'outils et panneaux latĂ©raux
  • Tableaux de bord : Contenu principal au centre avec navigation sur les cĂŽtĂ©s
  • Interfaces complexes : Quand vous avez besoin de plusieurs zones distinctes
  • Applications de bureau : Structure classique des applications de bureau
Exemple d'interface avec BorderPane
Exemple d'interface utilisant un BorderPane
Application avec barre de menu en haut, panneau de navigation Ă  gauche, zone de contenu principale au centre, et barre de statut en bas.

đŸ› ïž CrĂ©er un BorderPane dans Scene Builder

Voici comment créer et configurer un BorderPane dans Scene Builder :

Étape 1 : Ajouter un BorderPane

  1. Ouvrez Scene Builder
  2. Dans le panneau Library, trouvez la catégorie Containers
  3. Glissez-déposez un BorderPane dans la zone de conception
  4. Le BorderPane apparaĂźt avec cinq zones visibles : Top, Bottom, Left, Right, Center
Note : Le BorderPane est souvent utilisé comme élément racine d'un fichier FXML pour créer la structure principale d'une application.

Étape 2 : Remplir les zones du BorderPane

Pour ajouter du contenu dans chaque zone :

  1. Zone Top : Glissez un composant (MenuBar, ToolBar, etc.) et déposez-le dans la zone "Top" du BorderPane
  2. Zone Bottom : Glissez un composant (Label, HBox avec boutons, etc.) et déposez-le dans la zone "Bottom"
  3. Zone Left : Glissez un composant (VBox avec navigation, ListView, etc.) et déposez-le dans la zone "Left"
  4. Zone Right : Glissez un composant (panneau d'outils, etc.) et déposez-le dans la zone "Right"
  5. Zone Center : Glissez votre contenu principal (VBox, GridPane, TableView, etc.) et déposez-le dans la zone "Center"
Important : Chaque zone ne peut contenir qu'un seul composant. Si vous voulez plusieurs éléments dans une zone, utilisez un conteneur (VBox, HBox) comme intermédiaire.

📝 Exemple pratique : Application avec BorderPane

Créons une application simple avec une structure BorderPane complÚte :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un BorderPane comme racine
  2. Zone Top : Ajoutez un MenuBar avec quelques menus (Fichier, Édition, Aide)
  3. Zone Left : Ajoutez un VBox avec :
    • Spacing = 5
    • Padding = 10
    • Contient trois Button : "Accueil", "Profil", "ParamĂštres"
  4. Zone Center : Ajoutez un VBox avec :
    • Padding = 20
    • Contient un Label : "Zone de contenu principal"
    • Contient un TextArea pour le contenu
  5. Zone Bottom : Ajoutez un HBox avec :
    • Padding = 5
    • Alignment = CENTER_LEFT
    • Contient un Label : "PrĂȘt" (barre de statut)
  6. Zone Right : Laissez vide pour cet exemple (optionnel)
Résultat visuel :
Vous obtenez une application avec une barre de menu en haut, un panneau de navigation Ă  gauche, une zone de contenu principale au centre, et une barre de statut en bas. C'est la structure classique d'une application de bureau.

Exemple

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.*?>

<BorderPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <MenuBar>
         <menus>
            <Menu mnemonicParsing="false" text="Fichier">
               <items>
                  <MenuItem mnemonicParsing="false" text="Nouveau"/>
                  <MenuItem mnemonicParsing="false" text="Ouvrir"/>
                  <SeparatorMenuItem mnemonicParsing="false"/>
                  <MenuItem mnemonicParsing="false" text="Quitter"/>
               </items>
            </Menu>
            <Menu mnemonicParsing="false" text="Édition">
               <items>
                  <MenuItem mnemonicParsing="false" text="Copier"/>
                  <MenuItem mnemonicParsing="false" text="Coller"/>
               </items>
            </Menu>
            <Menu mnemonicParsing="false" text="Aide">
               <items>
                  <MenuItem mnemonicParsing="false" text="À propos"/>
               </items>
            </Menu>
         </menus>
      </MenuBar>
   </top>
   <left>
      <VBox spacing="5.0">
         <padding>
            <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
         </padding>
         <children>
            <Button text="Accueil"/>
            <Button text="Profil"/>
            <Button text="ParamĂštres"/>
         </children>
      </VBox>
   </left>
   <center>
      <VBox spacing="10.0">
         <padding>
            <Insets top="20.0" right="20.0" bottom="20.0" left="20.0"/>
         </padding>
         <children>
            <Label text="Zone de contenu principal"/>
            <TextArea prefHeight="200.0" prefWidth="200.0" wrapText="true"/>
         </children>
      </VBox>
   </center>
   <bottom>
      <HBox alignment="CENTER_LEFT">
         <padding>
            <Insets top="5.0" right="5.0" bottom="5.0" left="5.0"/>
         </padding>
         <children>
            <Label text="PrĂȘt"/>
         </children>
      </HBox>
   </bottom>
</BorderPane>
Explication du code FXML :
‱ <BorderPane> : Conteneur principal avec cinq zones
‱ <top> : Contient le MenuBar avec les menus Fichier, Édition, Aide
‱ <left> : Contient un VBox avec trois boutons de navigation
‱ <center> : Contient un VBox avec le contenu principal (Label et TextArea)
‱ <bottom> : Contient un HBox avec un Label pour la barre de statut
‱ <right> : Non utilisĂ© dans cet exemple (peut ĂȘtre omis)

⚙ PropriĂ©tĂ©s importantes du BorderPane

Voici les propriétés les plus utilisées pour configurer un BorderPane dans Scene Builder :

Propriétés de base (onglet Properties)

  • Pref Width : Largeur prĂ©fĂ©rĂ©e du conteneur
  • Pref Height : Hauteur prĂ©fĂ©rĂ©e du conteneur

Zones du BorderPane

Dans la vue hiérarchique, vous verrez les cinq zones :

  • top : Zone en haut (barre de menu, barre d'outils)
  • bottom : Zone en bas (barre de statut, informations)
  • left : Zone Ă  gauche (navigation, panneaux latĂ©raux)
  • right : Zone Ă  droite (panneaux d'outils, informations)
  • center : Zone centrale (contenu principal)

Comportement du redimensionnement

Le BorderPane gĂšre automatiquement le redimensionnement :

  • Top et Bottom : S'Ă©tirent horizontalement, gardent leur hauteur
  • Left et Right : S'Ă©tirent verticalement, gardent leur largeur
  • Center : Prend tout l'espace disponible restant
Fonctionnement :
Quand vous redimensionnez la fenĂȘtre, les zones Top et Bottom s'Ă©tirent horizontalement, les zones Left et Right s'Ă©tirent verticalement, et la zone Center prend automatiquement tout l'espace restant au centre.

💡 Bonnes pratiques avec BorderPane

  • Utilisez des conteneurs dans les zones : Si vous voulez plusieurs Ă©lĂ©ments dans une zone, utilisez un VBox ou HBox comme conteneur intermĂ©diaire
  • La zone Center est essentielle : C'est gĂ©nĂ©ralement la zone la plus importante, remplissez-la avec votre contenu principal
  • Les zones sont optionnelles : Vous n'ĂȘtes pas obligĂ© de remplir toutes les zones, laissez celles que vous n'utilisez pas vides
  • Pensez Ă  la hiĂ©rarchie : Utilisez la vue hiĂ©rarchique pour voir clairement quelle zone contient quoi
  • Combinez avec d'autres layouts : Chaque zone peut contenir n'importe quel autre layout (VBox, HBox, GridPane, etc.)
Important : Chaque zone du BorderPane ne peut contenir qu'un seul composant. Si vous avez besoin de plusieurs éléments dans une zone, créez d'abord un conteneur (VBox, HBox) et placez vos éléments dedans, puis glissez le conteneur dans la zone.

🔄 BorderPane vs autres layouts

Comparons le BorderPane avec d'autres layouts similaires :

  • BorderPane vs VBox/HBox : BorderPane offre une structure en cinq zones, VBox/HBox sont linĂ©aires
  • BorderPane vs GridPane : BorderPane a des zones fixes, GridPane permet une grille flexible
  • BorderPane vs AnchorPane : BorderPane organise automatiquement, AnchorPane permet un positionnement libre

3.1.4 – GridPane

Le GridPane est un conteneur qui organise ses éléments enfants dans une grille bidimensionnelle, avec des lignes et des colonnes. C'est le layout idéal pour créer des formulaires avec des labels et des champs alignés, des tableaux de données, ou toute interface nécessitant une organisation en grille.

🎯 Qu'est-ce qu'un GridPane ?

Le GridPane est un conteneur qui :

  • Organise en grille : Place les Ă©lĂ©ments dans des cellules dĂ©finies par des lignes et colonnes
  • GĂšre l'alignement : Permet d'aligner les Ă©lĂ©ments dans chaque cellule
  • GĂšre les espacements : Permet de dĂ©finir des espacements entre les lignes (vgap) et colonnes (hgap)
  • GĂšre le redimensionnement : Les colonnes et lignes peuvent s'Ă©tirer pour remplir l'espace
Analogie : Le GridPane est comme un tableau Excel ou une grille de mots croisés. Vous placez chaque élément dans une cellule spécifique définie par sa ligne et sa colonne.

📐 Cas d'utilisation du GridPane

Le GridPane est particuliĂšrement utile pour :

  • Formulaires structurĂ©s : Labels et champs alignĂ©s en colonnes
  • Tableaux de donnĂ©es : Afficher des donnĂ©es en grille
  • Interfaces de configuration : Organiser des options en grille
  • Grilles de boutons : CrĂ©er des grilles de boutons (calculatrice, clavier virtuel)
  • Tableaux de bord : Organiser des widgets en grille
Exemple d'interface avec GridPane
Exemple d'interface utilisant un GridPane
Formulaire d'inscription avec les labels dans la premiÚre colonne et les champs de saisie dans la deuxiÚme colonne, tous alignés en grille.

đŸ› ïž CrĂ©er un GridPane dans Scene Builder

Voici comment créer et configurer un GridPane dans Scene Builder :

Étape 1 : Ajouter un GridPane

  1. Ouvrez Scene Builder
  2. Dans le panneau Library, trouvez la catégorie Containers
  3. Glissez-déposez un GridPane dans la zone de conception
  4. Le GridPane apparaĂźt avec une grille visible (lignes et colonnes)

Étape 2 : Configurer les propriĂ©tĂ©s du GridPane

Sélectionnez le GridPane et configurez ses propriétés dans l'inspecteur :

  • Hgap : Espacement horizontal entre les colonnes (en pixels, ex: 10)
  • Vgap : Espacement vertical entre les lignes (en pixels, ex: 10)
  • Padding : Marge intĂ©rieure autour du contenu (dans l'onglet Layout)
  • Grid Lines Visible : Affiche les lignes de la grille (utile pour le design, dĂ©sactivĂ© en production)

Étape 3 : Ajouter des Ă©lĂ©ments dans le GridPane

Pour ajouter des composants dans le GridPane :

  1. Glissez-déposez un composant dans le GridPane
  2. Le composant se place automatiquement dans une cellule
  3. Sélectionnez le composant et, dans l'onglet Layout, configurez :
    • Column Index : NumĂ©ro de la colonne (commence Ă  0)
    • Row Index : NumĂ©ro de la ligne (commence Ă  0)
    • Column Span : Nombre de colonnes que l'Ă©lĂ©ment occupe
    • Row Span : Nombre de lignes que l'Ă©lĂ©ment occupe
Important : Les indices de ligne et colonne commencent Ă  0. La premiĂšre ligne est 0, la premiĂšre colonne est 0.

📝 Exemple pratique : Formulaire avec GridPane

Créons un formulaire d'inscription avec des labels et des champs alignés :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Ajoutez un Label : "Formulaire d'inscription" (titre)
  3. Ajoutez un GridPane dans le VBox et configurez :
    • Hgap = 15
    • Vgap = 10
    • Padding = 20
  4. Dans le GridPane, ajoutez les éléments suivants :
    • Ligne 0, Colonne 0 : Label "Nom :"
    • Ligne 0, Colonne 1 : TextField (Pref Width = 200)
    • Ligne 1, Colonne 0 : Label "PrĂ©nom :"
    • Ligne 1, Colonne 1 : TextField (Pref Width = 200)
    • Ligne 2, Colonne 0 : Label "Email :"
    • Ligne 2, Colonne 1 : TextField (Pref Width = 200)
    • Ligne 3, Colonne 0 : Label "TĂ©lĂ©phone :"
    • Ligne 3, Colonne 1 : TextField (Pref Width = 200)
    • Ligne 4, Colonne 0, Column Span = 2 : HBox avec deux Button "Annuler" et "Valider"
Résultat visuel :
Vous obtenez un formulaire bien structuré avec les labels dans la premiÚre colonne et les champs de saisie dans la deuxiÚme colonne, tous alignés verticalement. Les boutons en bas s'étendent sur deux colonnes.

Exemple

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.*?>

<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label text="Formulaire d'inscription" style="-fx-font-size: 18px; -fx-font-weight: bold;"/>
      <GridPane hgap="15.0" vgap="10.0">
         <padding>
            <Insets top="20.0" right="20.0" bottom="20.0" left="20.0"/>
         </padding>
         <children>
            <Label text="Nom :" GridPane.columnIndex="0" GridPane.rowIndex="0"/>
            <TextField prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="0"/>
            
            <Label text="Prénom :" GridPane.columnIndex="0" GridPane.rowIndex="1"/>
            <TextField prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="1"/>
            
            <Label text="Email :" GridPane.columnIndex="0" GridPane.rowIndex="2"/>
            <TextField prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="2"/>
            
            <Label text="Téléphone :" GridPane.columnIndex="0" GridPane.rowIndex="3"/>
            <TextField prefWidth="200.0" GridPane.columnIndex="1" GridPane.rowIndex="3"/>
            
            <HBox spacing="10.0" alignment="CENTER" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.rowIndex="4">
               <children>
                  <Button text="Annuler"/>
                  <Button text="Valider"/>
               </children>
            </HBox>
         </children>
      </GridPane>
   </children>
</VBox>
Explication du code FXML :
‱ <GridPane hgap="15.0" vgap="10.0"> : CrĂ©e un GridPane avec un espacement horizontal de 15px et vertical de 10px
‱ GridPane.columnIndex="0" : Place l'Ă©lĂ©ment dans la colonne 0 (premiĂšre colonne)
‱ GridPane.rowIndex="0" : Place l'Ă©lĂ©ment dans la ligne 0 (premiĂšre ligne)
‱ GridPane.columnSpan="2" : L'Ă©lĂ©ment s'Ă©tend sur 2 colonnes (utilisĂ© pour les boutons)
‱ Les labels sont dans la colonne 0, les TextField dans la colonne 1
‱ Chaque ligne correspond à un champ du formulaire

⚙ PropriĂ©tĂ©s importantes du GridPane

Voici les propriétés les plus utilisées pour configurer un GridPane dans Scene Builder :

Propriétés du GridPane (onglet Properties)

  • Hgap : Espacement horizontal entre les colonnes (en pixels)
  • Vgap : Espacement vertical entre les lignes (en pixels)
  • Grid Lines Visible : Affiche les lignes de la grille (utile pour le design)

Propriétés des enfants dans le GridPane (onglet Layout)

Quand vous sélectionnez un élément dans le GridPane, vous pouvez configurer :

  • Column Index : NumĂ©ro de la colonne (0, 1, 2, ...)
  • Row Index : NumĂ©ro de la ligne (0, 1, 2, ...)
  • Column Span : Nombre de colonnes occupĂ©es (1 par dĂ©faut)
  • Row Span : Nombre de lignes occupĂ©es (1 par dĂ©faut)
  • Halignment : Alignement horizontal dans la cellule (LEFT, CENTER, RIGHT)
  • Valignment : Alignement vertical dans la cellule (TOP, CENTER, BOTTOM)
  • Hgrow : Permet Ă  la colonne de s'Ă©tirer (NEVER, ALWAYS, SOMETIMES)
  • Vgrow : Permet Ă  la ligne de s'Ă©tirer (NEVER, ALWAYS, SOMETIMES)
  • Margin : Marge autour de l'Ă©lĂ©ment
Column Span et Row Span :
‱ Column Span = 2 : L'Ă©lĂ©ment occupe 2 colonnes
‱ Row Span = 3 : L'Ă©lĂ©ment occupe 3 lignes
‱ Utile pour crĂ©er des Ă©lĂ©ments qui s'Ă©tendent sur plusieurs cellules (ex: un bouton qui prend toute la largeur)

💡 Bonnes pratiques avec GridPane

  • Utilisez des espacements cohĂ©rents : Choisissez des valeurs uniformes pour Hgap et Vgap (ex: 10px)
  • Alignez les labels : Utilisez Halignment = RIGHT pour les labels dans la premiĂšre colonne pour un alignement professionnel
  • Activez Grid Lines Visible pendant le design : Cela vous aide Ă  voir la structure, dĂ©sactivez-le pour la production
  • Utilisez Column Span pour les boutons : Les boutons d'action en bas d'un formulaire peuvent s'Ă©tendre sur plusieurs colonnes
  • Pensez au redimensionnement : Configurez Hgrow et Vgrow pour que les colonnes/lignes s'adaptent Ă  la taille de la fenĂȘtre
  • Organisez logiquement : Placez les Ă©lĂ©ments liĂ©s sur la mĂȘme ligne ou colonne
Important : Les indices de ligne et colonne commencent à 0. La premiÚre cellule est à la ligne 0, colonne 0. Faites attention à ne pas créer de "trous" dans la grille en sautant des indices.

🔄 GridPane vs autres layouts

Comparons le GridPane avec d'autres layouts similaires :

  • GridPane vs VBox/HBox : GridPane permet une organisation bidimensionnelle, VBox/HBox sont linĂ©aires
  • GridPane vs BorderPane : GridPane offre une grille flexible, BorderPane a des zones fixes
  • GridPane vs FlowPane : GridPane a des cellules fixes, FlowPane organise automatiquement en flux

3.1.5 – AnchorPane

Le AnchorPane est un conteneur qui permet de positionner ses éléments enfants en utilisant des ancres (anchors) par rapport aux bords du conteneur. C'est le layout idéal pour créer des interfaces avec un positionnement précis, des éléments ancrés aux bords, ou des interfaces qui nécessitent un contrÎle total sur la position des éléments.

🎯 Qu'est-ce qu'un AnchorPane ?

Le AnchorPane est un conteneur qui :

  • Permet le positionnement libre : Vous pouvez placer les Ă©lĂ©ments n'importe oĂč dans le conteneur
  • Utilise des ancres : Permet d'ancrer les Ă©lĂ©ments aux bords (top, bottom, left, right)
  • GĂšre le redimensionnement : Les Ă©lĂ©ments peuvent rester ancrĂ©s aux bords lors du redimensionnement
  • Offre un contrĂŽle prĂ©cis : Permet un positionnement exact avec des coordonnĂ©es
Analogie : Le AnchorPane est comme une planche Ă  dessin oĂč vous pouvez placer des Ă©lĂ©ments n'importe oĂč, et les "ancrer" aux bords pour qu'ils restent en place mĂȘme si la planche change de taille.

📐 Cas d'utilisation du AnchorPane

Le AnchorPane est particuliĂšrement utile pour :

  • Interfaces avec positionnement prĂ©cis : Quand vous avez besoin d'un contrĂŽle total sur la position
  • ÉlĂ©ments ancrĂ©s aux bords : Boutons ou panneaux qui doivent rester aux bords
  • Overlays et popups : ÉlĂ©ments superposĂ©s avec positionnement prĂ©cis
  • Interfaces de jeu : ÉlĂ©ments de jeu avec positions fixes
  • Designs complexes : Quand les autres layouts ne suffisent pas
Exemple d'interface avec AnchorPane
Exemple d'interface utilisant un AnchorPane
Interface avec un titre ancré en haut, une zone de texte qui s'étire pour remplir l'espace disponible (ancrée aux quatre bords), et des boutons ancrés en bas.

đŸ› ïž CrĂ©er un AnchorPane dans Scene Builder

Voici comment créer et configurer un AnchorPane dans Scene Builder :

Étape 1 : Ajouter un AnchorPane

  1. Ouvrez Scene Builder
  2. Dans le panneau Library, trouvez la catégorie Containers
  3. Glissez-déposez un AnchorPane dans la zone de conception
  4. Le AnchorPane apparaßt comme un rectangle avec des bordures pointillées

Étape 2 : Ajouter des Ă©lĂ©ments dans l'AnchorPane

Pour ajouter des composants dans l'AnchorPane :

  1. Glissez-déposez un composant dans l'AnchorPane
  2. Le composant peut ĂȘtre placĂ© n'importe oĂč en le glissant
  3. Sélectionnez le composant et, dans l'onglet Layout, configurez les ancres

Étape 3 : Configurer les ancres

Pour chaque élément dans l'AnchorPane, vous pouvez configurer des ancres :

  • Top Anchor : Distance depuis le haut du conteneur (en pixels)
  • Bottom Anchor : Distance depuis le bas du conteneur (en pixels)
  • Left Anchor : Distance depuis la gauche du conteneur (en pixels)
  • Right Anchor : Distance depuis la droite du conteneur (en pixels)
Fonctionnement des ancres :
‱ Si vous dĂ©finissez Top Anchor = 10, l'Ă©lĂ©ment sera Ă  10 pixels du haut
‱ Si vous dĂ©finissez Left Anchor = 20 et Right Anchor = 20, l'Ă©lĂ©ment s'Ă©tirera horizontalement en gardant 20 pixels de chaque cĂŽtĂ©
‱ Les ancres permettent aux Ă©lĂ©ments de rester positionnĂ©s mĂȘme lors du redimensionnement

📝 Exemple pratique : Interface avec AnchorPane

Créons une interface avec des éléments ancrés aux différents bords :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un AnchorPane comme racine
  2. Configurez le AnchorPane :
    • Pref Width = 600
    • Pref Height = 400
  3. Ajoutez les éléments suivants :
    • Label "Titre" :
      • Top Anchor = 20
      • Left Anchor = 20
      • Right Anchor = 20
    • TextArea (zone de contenu) :
      • Top Anchor = 60
      • Left Anchor = 20
      • Right Anchor = 20
      • Bottom Anchor = 60
    • HBox avec deux Button (en bas) :
      • Bottom Anchor = 20
      • Left Anchor = 20
      • Right Anchor = 20
      • Contient deux Button : "Annuler" et "Valider"
Résultat visuel :
Vous obtenez une interface avec un titre ancrĂ© en haut, une zone de texte qui s'Ă©tire pour remplir l'espace disponible (ancrĂ©e aux quatre bords), et des boutons ancrĂ©s en bas. Quand vous redimensionnez la fenĂȘtre, tous les Ă©lĂ©ments restent correctement positionnĂ©s grĂące aux ancres.

Exemple

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.*?>

<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label text="Titre" style="-fx-font-size: 18px; -fx-font-weight: bold;" 
             AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="20.0"/>
      
      <TextArea wrapText="true" 
                AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" 
                AnchorPane.topAnchor="60.0" AnchorPane.bottomAnchor="60.0"/>
      
      <HBox spacing="10.0" alignment="CENTER" 
            AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="20.0" AnchorPane.bottomAnchor="20.0">
         <children>
            <Button text="Annuler"/>
            <Button text="Valider"/>
         </children>
      </HBox>
   </children>
</AnchorPane>
Explication du code FXML :
‱ <AnchorPane prefHeight="400.0" prefWidth="600.0"> : CrĂ©e un AnchorPane de 600x400 pixels
‱ AnchorPane.topAnchor="20.0" : L'Ă©lĂ©ment est Ă  20 pixels du haut
‱ AnchorPane.leftAnchor="20.0" : L'Ă©lĂ©ment est Ă  20 pixels de la gauche
‱ AnchorPane.rightAnchor="20.0" : L'Ă©lĂ©ment est Ă  20 pixels de la droite
‱ AnchorPane.bottomAnchor="60.0" : L'Ă©lĂ©ment est Ă  60 pixels du bas
‱ Le TextArea utilise les quatre ancres (top, bottom, left, right) pour s'Ă©tirer et remplir l'espace disponible
‱ Les boutons sont ancrĂ©s en bas avec des ancres left et right pour s'Ă©tirer horizontalement

⚙ PropriĂ©tĂ©s importantes de l'AnchorPane

Voici les propriétés les plus utilisées pour configurer un AnchorPane dans Scene Builder :

Propriétés de base (onglet Properties)

  • Pref Width : Largeur prĂ©fĂ©rĂ©e du conteneur
  • Pref Height : Hauteur prĂ©fĂ©rĂ©e du conteneur

Propriétés des enfants dans l'AnchorPane (onglet Layout)

Quand vous sélectionnez un élément dans l'AnchorPane, vous pouvez configurer :

  • Top Anchor : Distance depuis le haut (en pixels)
  • Bottom Anchor : Distance depuis le bas (en pixels)
  • Left Anchor : Distance depuis la gauche (en pixels)
  • Right Anchor : Distance depuis la droite (en pixels)
  • Layout X : Position X absolue (alternative aux ancres)
  • Layout Y : Position Y absolue (alternative aux ancres)
Ancres vs Position absolue :
‱ Ancres : L'Ă©lĂ©ment reste Ă  une distance fixe des bords, mĂȘme lors du redimensionnement
‱ Layout X/Y : Position fixe absolue, l'Ă©lĂ©ment ne bouge pas lors du redimensionnement
‱ Utilisez les ancres pour des Ă©lĂ©ments qui doivent s'adapter au redimensionnement
‱ Utilisez Layout X/Y pour des Ă©lĂ©ments avec position fixe

💡 Bonnes pratiques avec AnchorPane

  • Utilisez les ancres pour l'adaptabilitĂ© : Les ancres permettent aux Ă©lĂ©ments de s'adapter au redimensionnement
  • Combinez Top/Bottom ou Left/Right : Pour qu'un Ă©lĂ©ment s'Ă©tire, dĂ©finissez les ancres opposĂ©es (ex: Top = 10 et Bottom = 10)
  • Évitez le positionnement absolu si possible : PrĂ©fĂ©rez les ancres pour une meilleure adaptabilitĂ©
  • Utilisez pour des cas spĂ©cifiques : AnchorPane est puissant mais peut ĂȘtre complexe, utilisez-le quand les autres layouts ne suffisent pas
  • Pensez au redimensionnement : Testez toujours votre interface avec diffĂ©rentes tailles de fenĂȘtre
Important : L'AnchorPane offre beaucoup de flexibilité mais peut rendre l'interface moins maintenable si mal utilisé. Préférez les autres layouts (VBox, HBox, GridPane) quand ils suffisent, et utilisez AnchorPane pour des cas spécifiques nécessitant un positionnement précis.

🔄 AnchorPane vs autres layouts

Comparons l'AnchorPane avec d'autres layouts similaires :

  • AnchorPane vs VBox/HBox : AnchorPane permet un positionnement libre, VBox/HBox organisent automatiquement
  • AnchorPane vs GridPane : AnchorPane offre un positionnement libre, GridPane organise en grille
  • AnchorPane vs Pane : AnchorPane ajoute les ancres, Pane est un positionnement absolu pur
Conseil : Pour la plupart des interfaces, VBox, HBox, BorderPane et GridPane sont suffisants. Utilisez AnchorPane seulement quand vous avez besoin d'un contrÎle précis sur le positionnement ou d'éléments ancrés aux bords.