↑
CHAPITRE 3.3

Organisation et dimensionnement

MaĂźtriser l'alignement, l'espacement, les marges et le redimensionnement dans Scene Builder
Dans cette section, vous allez apprendre Ă  maĂźtriser l'organisation et le dimensionnement de vos interfaces JavaFX. Vous dĂ©couvrirez comment utiliser les alignements et l'espacement pour crĂ©er des interfaces Ă©quilibrĂ©es, comment gĂ©rer les marges et les paddings pour un espacement professionnel, et comment contrĂŽler le redimensionnement automatique des Ă©lĂ©ments. Ces concepts sont essentiels pour crĂ©er des interfaces qui s'adaptent correctement Ă  diffĂ©rentes tailles de fenĂȘtre. Toutes les configurations seront effectuĂ©es visuellement dans Scene Builder.

3.3Organisation et dimensionnement

3.3.1 – Alignments et spacing

L'alignement et l'espacement sont deux concepts fondamentaux pour créer des interfaces JavaFX bien organisées et visuellement équilibrées. L'alignement détermine comment les éléments sont positionnés dans leur conteneur, tandis que l'espacement contrÎle la distance entre les éléments. Dans cette section, vous apprendrez à utiliser ces propriétés dans Scene Builder pour créer des interfaces professionnelles.

🎯 Qu'est-ce que l'alignement ?

L'alignement détermine la position des éléments enfants dans leur conteneur. Il existe différents types d'alignement selon le layout utilisé :

  • Alignement dans HBox/VBox : Aligne les Ă©lĂ©ments verticalement (HBox) ou horizontalement (VBox)
  • Alignement dans GridPane : Aligne les Ă©lĂ©ments dans chaque cellule (horizontalement et verticalement)
  • Alignement dans BorderPane : Les zones sont dĂ©jĂ  positionnĂ©es, mais vous pouvez aligner le contenu dans chaque zone
  • Alignement dans StackPane : Aligne les Ă©lĂ©ments superposĂ©s
Analogie : L'alignement est comme l'alignement du texte dans un traitement de texte : à gauche, centré, à droite, justifié. Mais pour les éléments d'interface, vous pouvez aussi aligner en haut, au centre vertical, ou en bas.

📐 Types d'alignement disponibles

JavaFX offre plusieurs options d'alignement. Voici les principales :

Alignements pour HBox et VBox

  • TOP_LEFT : En haut Ă  gauche
  • TOP_CENTER : En haut au centre
  • TOP_RIGHT : En haut Ă  droite
  • CENTER_LEFT : Au centre vertical, Ă  gauche
  • CENTER : CentrĂ© horizontalement et verticalement
  • CENTER_RIGHT : Au centre vertical, Ă  droite
  • BOTTOM_LEFT : En bas Ă  gauche
  • BOTTOM_CENTER : En bas au centre
  • BOTTOM_RIGHT : En bas Ă  droite

Alignements pour GridPane

Dans un GridPane, vous pouvez aligner chaque élément dans sa cellule :

  • Halignment : Alignement horizontal (LEFT, CENTER, RIGHT)
  • Valignment : Alignement vertical (TOP, CENTER, BOTTOM)

đŸ› ïž Configurer l'alignement dans Scene Builder

Voici comment configurer l'alignement dans Scene Builder :

Pour HBox et VBox

  1. Sélectionnez le HBox ou VBox
  2. Dans l'onglet Layout de l'inspecteur
  3. Modifiez la propriété Alignment
  4. Choisissez parmi les options disponibles (CENTER, TOP_LEFT, etc.)

Pour GridPane

  1. Sélectionnez un élément enfant dans le GridPane
  2. Dans l'onglet Layout de l'inspecteur
  3. Modifiez Halignment pour l'alignement horizontal
  4. Modifiez Valignment pour l'alignement vertical

📏 Qu'est-ce que le spacing ?

Le spacing (espacement) définit la distance uniforme entre les éléments enfants d'un conteneur. C'est une propriété importante pour créer des interfaces aérées et professionnelles.

  • Spacing dans HBox : Espacement horizontal entre les Ă©lĂ©ments
  • Spacing dans VBox : Espacement vertical entre les Ă©lĂ©ments
  • Hgap dans GridPane/FlowPane : Espacement horizontal entre les colonnes
  • Vgap dans GridPane/FlowPane : Espacement vertical entre les lignes
Différence entre spacing et padding :
‱ Spacing : Espacement entre les Ă©lĂ©ments enfants (Ă  l'intĂ©rieur du conteneur)
‱ Padding : Espacement entre le conteneur et ses bords (marge intĂ©rieure)
‱ Le spacing sĂ©pare les Ă©lĂ©ments entre eux, le padding sĂ©pare le contenu des bords

đŸ› ïž Configurer le spacing dans Scene Builder

Voici comment configurer l'espacement dans Scene Builder :

Pour HBox et VBox

  1. Sélectionnez le HBox ou VBox
  2. Dans l'onglet Properties de l'inspecteur
  3. Modifiez la propriété Spacing
  4. Entrez une valeur en pixels (ex: 10, 15, 20)

Pour GridPane, FlowPane, TilePane

  1. Sélectionnez le conteneur
  2. Dans l'onglet Properties de l'inspecteur
  3. Modifiez Hgap pour l'espacement horizontal
  4. Modifiez Vgap pour l'espacement vertical

📝 Exemple pratique : Formulaire avec alignement et espacement

Créons un formulaire bien aligné avec un espacement cohérent :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Sélectionnez le VBox et configurez :
    • Spacing = 15
    • Alignment = CENTER
    • Padding = 20
  3. Ajoutez les éléments suivants :
    • Un Label "Inscription" (titre, style avec grande police)
    • Un HBox avec :
      • Spacing = 10
      • Alignment = CENTER_LEFT
      • Contient un Label "Nom :" et un TextField
    • Un autre HBox similaire pour "Email :"
    • Un HBox avec deux Button "Annuler" et "Valider" :
      • Spacing = 10
      • Alignment = CENTER
Résultat visuel :
Vous obtenez un formulaire bien organisé avec un espacement uniforme de 15 pixels entre chaque section, tous les éléments centrés horizontalement, et des groupes d'éléments (Label + TextField) alignés à gauche dans des HBox.

Exemple

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

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

<VBox spacing="15.0" 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="Inscription" style="-fx-font-size: 24px; -fx-font-weight: bold;"/>
      
      <HBox spacing="10.0" alignment="CENTER_LEFT">
         <children>
            <Label text="Nom :" prefWidth="80.0"/>
            <TextField prefWidth="200.0"/>
         </children>
      </HBox>
      
      <HBox spacing="10.0" alignment="CENTER_LEFT">
         <children>
            <Label text="Email :" prefWidth="80.0"/>
            <TextField prefWidth="200.0"/>
         </children>
      </HBox>
      
      <HBox spacing="10.0" alignment="CENTER">
         <children>
            <Button text="Annuler"/>
            <Button text="Valider"/>
         </children>
      </HBox>
   </children>
</VBox>
Explication du code FXML :
‱ spacing="15.0" : Espacement de 15 pixels entre les Ă©lĂ©ments du VBox
‱ alignment="CENTER" : Alignement centrĂ© des Ă©lĂ©ments dans le VBox
‱ alignment="CENTER_LEFT" : Alignement centrĂ© verticalement, Ă  gauche horizontalement pour les HBox de champs
‱ alignment="CENTER" : Alignement centrĂ© pour les boutons
‱ L'espacement uniforme crĂ©e une apparence professionnelle et Ă©quilibrĂ©e

💡 Bonnes pratiques pour l'alignement et l'espacement

  • Utilisez un spacing cohĂ©rent : Choisissez une valeur uniforme (ex: 10px, 15px, 20px) pour toute l'interface
  • Centrez les Ă©lĂ©ments principaux : Utilisez CENTER pour les Ă©lĂ©ments centraux de l'interface
  • Alignez les labels Ă  gauche : Dans les formulaires, alignez les labels Ă  gauche pour une meilleure lisibilitĂ©
  • Pensez Ă  la hiĂ©rarchie visuelle : Utilisez diffĂ©rents alignements pour crĂ©er une hiĂ©rarchie
  • Testez avec diffĂ©rents contenus : VĂ©rifiez que l'alignement fonctionne avec diffĂ©rents contenus
  • Évitez les espacements trop grands ou trop petits : 10-20 pixels est gĂ©nĂ©ralement un bon compromis
Important : L'alignement et l'espacement sont cruciaux pour créer des interfaces professionnelles. Prenez le temps de bien les configurer dans Scene Builder, car ils ont un impact majeur sur l'apparence et l'ergonomie de votre interface.

🔄 Alignement vs autres propriĂ©tĂ©s

L'alignement fonctionne en combinaison avec d'autres propriétés :

  • Alignement + Padding : L'alignement positionne les Ă©lĂ©ments, le padding crĂ©e de l'espace autour
  • Alignement + Spacing : L'alignement organise les Ă©lĂ©ments, le spacing les sĂ©pare
  • Alignement + Marges : Les marges individuelles peuvent surcharger l'alignement gĂ©nĂ©ral

3.3.2 – Margins et paddings

Les marges (margins) et les paddings (marges intérieures) sont deux concepts essentiels pour créer des interfaces avec un espacement professionnel. Bien que similaires, ils ont des rÎles différents : le padding crée de l'espace à l'intérieur d'un conteneur, tandis que les marges créent de l'espace autour d'un élément spécifique. Dans cette section, vous apprendrez à utiliser ces propriétés dans Scene Builder.

🎯 Qu'est-ce que le padding ?

Le padding (marge intĂ©rieure) est l'espace entre le contenu d'un conteneur et ses bords intĂ©rieurs. Il s'applique au conteneur lui-mĂȘme et affecte tous les Ă©lĂ©ments enfants.

  • Padding uniforme : MĂȘme espacement sur tous les cĂŽtĂ©s
  • Padding individuel : Espacement diffĂ©rent pour chaque cĂŽtĂ© (top, right, bottom, left)
  • Effet visuel : CrĂ©e de l'espace entre les bords du conteneur et son contenu
Analogie : Le padding est comme la marge intérieure d'un cadre photo. C'est l'espace entre le bord du cadre (le conteneur) et la photo (le contenu).

🎯 Qu'est-ce qu'une margin ?

La margin (marge) est l'espace autour d'un élément spécifique, à l'extérieur de ses bords. Elle s'applique à un élément individuel et crée de l'espace entre cet élément et les éléments voisins ou les bords du conteneur.

  • Margin uniforme : MĂȘme espacement sur tous les cĂŽtĂ©s
  • Margin individuelle : Espacement diffĂ©rent pour chaque cĂŽtĂ©
  • Effet visuel : CrĂ©e de l'espace autour d'un Ă©lĂ©ment spĂ©cifique
Différence clé :
‱ Padding : À l'intĂ©rieur du conteneur, crĂ©e de l'espace entre le conteneur et ses enfants
‱ Margin : À l'extĂ©rieur de l'Ă©lĂ©ment, crĂ©e de l'espace entre l'Ă©lĂ©ment et ses voisins
‱ Le padding affecte tous les enfants, la margin affecte seulement l'Ă©lĂ©ment spĂ©cifique

đŸ› ïž Configurer le padding dans Scene Builder

Voici comment configurer le padding dans Scene Builder :

Étape 1 : SĂ©lectionner le conteneur

  1. Sélectionnez le conteneur (VBox, HBox, GridPane, etc.)
  2. Ouvrez l'onglet Layout dans l'inspecteur

Étape 2 : Configurer le padding

Dans la section Padding, vous pouvez :

  • Padding uniforme : Entrez une valeur unique qui s'applique aux quatre cĂŽtĂ©s
  • Padding individuel : Configurez sĂ©parĂ©ment :
    • Top : Espacement en haut
    • Right : Espacement Ă  droite
    • Bottom : Espacement en bas
    • Left : Espacement Ă  gauche

đŸ› ïž Configurer les marges dans Scene Builder

Voici comment configurer les marges dans Scene Builder :

Étape 1 : SĂ©lectionner l'Ă©lĂ©ment enfant

  1. Sélectionnez un élément enfant dans un conteneur (Button, Label, TextField, etc.)
  2. Ouvrez l'onglet Layout dans l'inspecteur

Étape 2 : Configurer la margin

Dans la section Margin, vous pouvez :

  • Margin uniforme : Entrez une valeur unique qui s'applique aux quatre cĂŽtĂ©s
  • Margin individuelle : Configurez sĂ©parĂ©ment :
    • Top : Marge en haut
    • Right : Marge Ă  droite
    • Bottom : Marge en bas
    • Left : Marge Ă  gauche

📝 Exemple pratique : Interface avec padding et marges

Créons une interface qui illustre l'utilisation du padding et des marges :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Sélectionnez le VBox et configurez le padding :
    • Padding = 20 (uniforme sur tous les cĂŽtĂ©s)
    • Spacing = 10
  3. Ajoutez un Label "Titre" avec :
    • Margin Bottom = 15 (marge en bas pour sĂ©parer du contenu suivant)
  4. Ajoutez un HBox avec :
    • Padding = 10
    • Contient deux Button
  5. Le premier Button a :
    • Margin Right = 10 (marge Ă  droite pour sĂ©parer du deuxiĂšme bouton)
Résultat visuel :
Vous obtenez une interface avec un padding de 20 pixels autour du contenu principal, un espacement de 10 pixels entre les éléments, une marge de 15 pixels sous le titre, et une marge de 10 pixels entre les deux boutons. L'espacement est clair et professionnel.

Exemple

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

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

<VBox spacing="10.0" 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="Titre" style="-fx-font-size: 18px; -fx-font-weight: bold;">
         <VBox.margin>
            <Insets bottom="15.0"/>
         </VBox.margin>
      </Label>
      
      <Label text="Contenu principal"/>
      
      <HBox spacing="10.0">
         <padding>
            <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
         </padding>
         <children>
            <Button text="Bouton 1">
               <HBox.margin>
                  <Insets right="10.0"/>
               </HBox.margin>
            </Button>
            <Button text="Bouton 2"/>
         </children>
      </HBox>
   </children>
</VBox>
Explication du code FXML :
‱ <padding><Insets top="20.0" right="20.0" bottom="20.0" left="20.0"/></padding> : Padding de 20 pixels sur tous les cĂŽtĂ©s du VBox
‱ <VBox.margin><Insets bottom="15.0"/></VBox.margin> : Marge de 15 pixels en bas du Label (spĂ©cifique Ă  cet Ă©lĂ©ment)
‱ <HBox.margin><Insets right="10.0"/></HBox.margin> : Marge de 10 pixels à droite du premier Button
‱ Le padding crĂ©e de l'espace autour du contenu, les marges crĂ©ent de l'espace autour d'Ă©lĂ©ments spĂ©cifiques

⚙ PropriĂ©tĂ©s de padding et margin

Voici les propriétés disponibles dans Scene Builder :

Padding (pour les conteneurs)

  • Top : Espacement en haut (en pixels)
  • Right : Espacement Ă  droite (en pixels)
  • Bottom : Espacement en bas (en pixels)
  • Left : Espacement Ă  gauche (en pixels)
  • Uniform : Valeur unique pour les quatre cĂŽtĂ©s

Margin (pour les éléments enfants)

  • Top : Marge en haut (en pixels)
  • Right : Marge Ă  droite (en pixels)
  • Bottom : Marge en bas (en pixels)
  • Left : Marge Ă  gauche (en pixels)
  • Uniform : Valeur unique pour les quatre cĂŽtĂ©s

💡 Bonnes pratiques pour padding et margin

  • Utilisez le padding pour le conteneur : CrĂ©ez de l'espace autour de tout le contenu
  • Utilisez les marges pour des Ă©lĂ©ments spĂ©cifiques : CrĂ©ez de l'espace autour d'un Ă©lĂ©ment particulier
  • Valeurs cohĂ©rentes : Utilisez des valeurs cohĂ©rentes (multiples de 5 ou 10) pour un rendu professionnel
  • Padding gĂ©nĂ©ralement plus grand : Le padding du conteneur est souvent plus grand que les marges individuelles
  • Testez visuellement : Ajustez les valeurs dans Scene Builder pour voir l'effet immĂ©diatement
  • Évitez les valeurs trop grandes : Trop d'espace peut rendre l'interface vide et peu efficace
Important : Le padding et les marges s'additionnent. Si un conteneur a un padding de 20px et un élément enfant a une marge de 10px, l'espace total entre le bord du conteneur et l'élément sera de 30px (20 + 10).

🔄 Padding vs Margin : Quand utiliser quoi ?

Voici des rÚgles simples pour décider quand utiliser le padding ou les marges :

✅ Utilisez le padding quand :

  • Vous voulez crĂ©er de l'espace autour de tout le contenu d'un conteneur
  • Vous voulez que tous les Ă©lĂ©ments enfants aient le mĂȘme espacement des bords
  • Vous voulez crĂ©er une zone "intĂ©rieure" dans un conteneur

✅ Utilisez les marges quand :

  • Vous voulez crĂ©er de l'espace autour d'un Ă©lĂ©ment spĂ©cifique
  • Vous voulez sĂ©parer un Ă©lĂ©ment particulier des autres
  • Vous voulez crĂ©er un espacement diffĂ©rent pour certains Ă©lĂ©ments
RĂšgle simple : Si vous voulez que tous les Ă©lĂ©ments aient le mĂȘme espacement des bords, utilisez le padding. Si vous voulez un espacement spĂ©cifique pour un Ă©lĂ©ment, utilisez une marge.

3.3.3 – Redimensionnement automatique

Le redimensionnement automatique permet aux Ă©lĂ©ments de s'adapter Ă  la taille de leur conteneur ou de la fenĂȘtre. En JavaFX, vous pouvez contrĂŽler comment les Ă©lĂ©ments se redimensionnent grĂące aux propriĂ©tĂ©s de croissance (grow) et aux contraintes de taille (min, pref, max). Dans cette section, vous apprendrez Ă  configurer le redimensionnement automatique dans Scene Builder pour crĂ©er des interfaces adaptatives.

🎯 Qu'est-ce que le redimensionnement automatique ?

Le redimensionnement automatique permet aux éléments de :

  • S'Ă©tirer : Prendre plus d'espace quand disponible
  • Se rĂ©trĂ©cir : RĂ©duire leur taille quand l'espace est limitĂ©
  • S'adapter : S'ajuster automatiquement aux changements de taille de la fenĂȘtre
  • Respecter les contraintes : Rester dans les limites min/max dĂ©finies
Analogie : Le redimensionnement automatique est comme un Ă©lastique. Quand vous tirez dessus (agrandissez la fenĂȘtre), il s'Ă©tire. Quand vous relĂąchez (rĂ©trĂ©cissez la fenĂȘtre), il se contracte, mais toujours dans certaines limites.

📐 PropriĂ©tĂ©s de taille : Min, Pref, Max

Chaque élément JavaFX a trois propriétés de taille :

  • Min Width / Min Height : Taille minimale que l'Ă©lĂ©ment peut avoir
  • Pref Width / Pref Height : Taille prĂ©fĂ©rĂ©e (idĂ©ale) de l'Ă©lĂ©ment
  • Max Width / Max Height : Taille maximale que l'Ă©lĂ©ment peut avoir
Fonctionnement :
‱ Min : L'Ă©lĂ©ment ne peut pas ĂȘtre plus petit que cette taille
‱ Pref : C'est la taille que l'Ă©lĂ©ment prĂ©fĂšre avoir (sa taille "naturelle")
‱ Max : L'Ă©lĂ©ment ne peut pas ĂȘtre plus grand que cette taille (ou USE_PREF_SIZE pour utiliser la taille prĂ©fĂ©rĂ©e)
‱ Le layout essaie de respecter ces contraintes lors du redimensionnement

đŸ› ïž Configurer les tailles dans Scene Builder

Voici comment configurer les tailles dans Scene Builder :

Étape 1 : SĂ©lectionner l'Ă©lĂ©ment

  1. Sélectionnez l'élément (Button, Label, TextField, etc.)
  2. Ouvrez l'onglet Properties dans l'inspecteur

Étape 2 : Configurer les tailles

Dans la section Size, configurez :

  • Min Width / Min Height : Taille minimale (en pixels ou laissez vide pour auto)
  • Pref Width / Pref Height : Taille prĂ©fĂ©rĂ©e (en pixels)
  • Max Width / Max Height : Taille maximale (en pixels ou USE_PREF_SIZE)

📏 PropriĂ©tĂ©s de croissance : Hgrow et Vgrow

Les propriétés Hgrow (croissance horizontale) et Vgrow (croissance verticale) contrÎlent si un élément peut s'étirer pour remplir l'espace disponible.

Valeurs possibles :

  • NEVER : L'Ă©lĂ©ment garde toujours sa taille prĂ©fĂ©rĂ©e, ne s'Ă©tire jamais
  • ALWAYS : L'Ă©lĂ©ment s'Ă©tire toujours pour remplir l'espace disponible
  • SOMETIMES : L'Ă©lĂ©ment s'Ă©tire seulement si nĂ©cessaire (comportement par dĂ©faut pour certains layouts)

đŸ› ïž Configurer Hgrow et Vgrow dans Scene Builder

Voici comment configurer la croissance dans Scene Builder :

Pour les éléments dans HBox

  1. Sélectionnez un élément enfant dans un HBox
  2. Ouvrez l'onglet Layout dans l'inspecteur
  3. Modifiez la propriété Hgrow :
    • NEVER : L'Ă©lĂ©ment garde sa largeur
    • ALWAYS : L'Ă©lĂ©ment s'Ă©tire horizontalement
    • SOMETIMES : S'Ă©tire si nĂ©cessaire

Pour les éléments dans VBox

  1. Sélectionnez un élément enfant dans un VBox
  2. Ouvrez l'onglet Layout dans l'inspecteur
  3. Modifiez la propriété Vgrow :
    • NEVER : L'Ă©lĂ©ment garde sa hauteur
    • ALWAYS : L'Ă©lĂ©ment s'Ă©tire verticalement
    • SOMETIMES : S'Ă©tire si nĂ©cessaire

Pour les éléments dans GridPane

  1. Sélectionnez un élément dans un GridPane
  2. Ouvrez l'onglet Layout dans l'inspecteur
  3. Configurez Hgrow pour la croissance horizontale de la colonne
  4. Configurez Vgrow pour la croissance verticale de la ligne

📝 Exemple pratique : Interface adaptative

Créons une interface qui s'adapte au redimensionnement :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un BorderPane comme racine
  2. Zone Center : Ajoutez un VBox et configurez :
    • Vgrow = ALWAYS (pour le VBox dans le BorderPane)
  3. Dans ce VBox, ajoutez :
    • Un Label "Titre" (taille fixe, ne s'Ă©tire pas)
    • Un TextArea avec :
      • Vgrow = ALWAYS (s'Ă©tire verticalement)
      • Hgrow = ALWAYS (s'Ă©tire horizontalement)
    • Un HBox avec deux Button :
      • Le premier Button : Hgrow = ALWAYS (s'Ă©tire horizontalement)
      • Le deuxiĂšme Button : Hgrow = NEVER (taille fixe)
Résultat visuel :
Quand vous redimensionnez la fenĂȘtre, le TextArea s'Ă©tire pour remplir l'espace disponible, le premier bouton s'Ă©tire horizontalement, et le deuxiĂšme bouton garde sa taille fixe. L'interface s'adapte automatiquement aux changements de taille.

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">
   <center>
      <VBox spacing="10.0">
         <padding>
            <Insets top="20.0" right="20.0" bottom="20.0" left="20.0"/>
         </padding>
         <children>
            <Label text="Titre" style="-fx-font-size: 18px; -fx-font-weight: bold;"/>
            
            <TextArea wrapText="true" VBox.vgrow="ALWAYS"/>
            
            <HBox spacing="10.0">
               <children>
                  <Button text="Bouton qui s'étire" HBox.hgrow="ALWAYS"/>
                  <Button text="Bouton fixe" HBox.hgrow="NEVER"/>
               </children>
            </HBox>
         </children>
      </VBox>
   </center>
</BorderPane>
Explication du code FXML :
‱ VBox.vgrow="ALWAYS" : Le TextArea s'Ă©tire verticalement pour remplir l'espace disponible dans le VBox
‱ HBox.hgrow="ALWAYS" : Le TextArea s'Ă©tire aussi horizontalement (si dans un HBox)
‱ HBox.hgrow="ALWAYS" sur le premier Button : Le bouton s'Ă©tire horizontalement
‱ HBox.hgrow="NEVER" sur le deuxiùme Button : Le bouton garde sa taille fixe
‱ Quand la fenĂȘtre est redimensionnĂ©e, les Ă©lĂ©ments avec ALWAYS s'adaptent automatiquement

⚙ PropriĂ©tĂ©s de redimensionnement

Voici un résumé des propriétés importantes pour le redimensionnement :

Propriétés de taille (onglet Properties)

  • Min Width / Min Height : Taille minimale (en pixels)
  • Pref Width / Pref Height : Taille prĂ©fĂ©rĂ©e (en pixels)
  • Max Width / Max Height : Taille maximale (en pixels ou USE_PREF_SIZE)

Propriétés de croissance (onglet Layout)

  • Hgrow : Croissance horizontale (NEVER, ALWAYS, SOMETIMES)
  • Vgrow : Croissance verticale (NEVER, ALWAYS, SOMETIMES)

💡 Bonnes pratiques pour le redimensionnement

  • Utilisez ALWAYS pour les Ă©lĂ©ments principaux : Les zones de contenu principales doivent souvent s'Ă©tirer
  • Utilisez NEVER pour les boutons et labels : Les Ă©lĂ©ments de contrĂŽle gardent gĂ©nĂ©ralement une taille fixe
  • DĂ©finissez des tailles min/max : ProtĂ©gez vos Ă©lĂ©ments avec des limites raisonnables
  • Testez le redimensionnement : Redimensionnez la fenĂȘtre dans Scene Builder pour voir le comportement
  • Pensez aux diffĂ©rentes tailles d'Ă©cran : Votre interface doit fonctionner sur diffĂ©rentes rĂ©solutions
  • Combinez avec les contraintes : Utilisez min/max avec grow pour un contrĂŽle prĂ©cis
Important : Le redimensionnement automatique est essentiel pour crĂ©er des interfaces adaptatives. Testez toujours votre interface en redimensionnant la fenĂȘtre pour vous assurer que tous les Ă©lĂ©ments se comportent correctement.

🔄 StratĂ©gies de redimensionnement

Voici des stratégies courantes pour différents types d'éléments :

ÉlĂ©ments qui doivent s'Ă©tirer

  • TextArea, TextField : Hgrow = ALWAYS, Vgrow = ALWAYS (pour TextArea)
  • Zones de contenu principales : S'Ă©tirent pour remplir l'espace
  • Tableaux et listes : S'Ă©tirent pour afficher plus de donnĂ©es

ÉlĂ©ments qui doivent garder leur taille

  • Boutons : Hgrow = NEVER, Vgrow = NEVER (taille fixe)
  • Labels : Taille basĂ©e sur le contenu
  • IcĂŽnes : Taille fixe

ÉlĂ©ments conditionnels

  • Certains conteneurs : Utilisent SOMETIMES pour s'adapter si nĂ©cessaire
  • ÉlĂ©ments flexibles : S'Ă©tirent seulement s'il y a de l'espace disponible

📋 Exemple complet : Interface complùtement adaptative

Créons une interface qui illustre tous les concepts de redimensionnement :

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>
      <Label text="Application Adaptative" style="-fx-font-size: 20px; -fx-font-weight: bold; -fx-padding: 10px;"/>
   </top>
   <center>
      <VBox spacing="10.0">
         <padding>
            <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
         </padding>
         <children>
            <Label text="Zone de contenu principale"/>
            <TextArea wrapText="true" prefHeight="200.0" VBox.vgrow="ALWAYS"/>
         </children>
      </VBox>
   </center>
   <bottom>
      <HBox spacing="10.0" alignment="CENTER_RIGHT">
         <padding>
            <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
         </padding>
         <children>
            <Button text="Annuler" HBox.hgrow="NEVER"/>
            <Button text="Valider" HBox.hgrow="NEVER"/>
         </children>
      </HBox>
   </bottom>
</BorderPane>
Explication du redimensionnement :
‱ Top (Label) : Taille fixe, ne s'Ă©tire pas
‱ Center (TextArea) : VBox.vgrow="ALWAYS" - S'Ă©tire verticalement pour remplir l'espace
‱ Bottom (Boutons) : HBox.hgrow="NEVER" - Les boutons gardent leur taille fixe
‱ Quand vous redimensionnez la fenĂȘtre, seule la zone centrale (TextArea) s'adapte, les autres Ă©lĂ©ments gardent leur taille

💡 Points clĂ©s Ă  retenir

  • Min/Pref/Max : DĂ©finissent les contraintes de taille d'un Ă©lĂ©ment
  • Hgrow/Vgrow : ContrĂŽlent si un Ă©lĂ©ment peut s'Ă©tirer (NEVER, ALWAYS, SOMETIMES)
  • ALWAYS : Pour les Ă©lĂ©ments qui doivent remplir l'espace disponible
  • NEVER : Pour les Ă©lĂ©ments qui doivent garder une taille fixe
  • Testez toujours : Redimensionnez la fenĂȘtre pour vĂ©rifier le comportement
  • Combinez les propriĂ©tĂ©s : Utilisez min/max avec grow pour un contrĂŽle prĂ©cis
Important : Le redimensionnement automatique est crucial pour crĂ©er des interfaces professionnelles qui s'adaptent Ă  diffĂ©rentes tailles de fenĂȘtre. Prenez le temps de bien configurer ces propriĂ©tĂ©s dans Scene Builder.