↑
CHAPITRE 3.2

Les autres Layouts utiles

Découvrir des layouts complémentaires pour des besoins spécifiques avec Scene Builder
Dans cette section, vous allez découvrir cinq layouts complémentaires de JavaFX : FlowPane, TilePane, StackPane, Pane et ScrollPane. Ces conteneurs offrent des fonctionnalités spécialisées pour des cas d'usage spécifiques. Vous apprendrez à les utiliser avec Scene Builder pour créer des interfaces adaptatives et flexibles. Toutes les interfaces seront créées visuellement dans Scene Builder, sans écrire de code pour créer les conteneurs.

3.2Les autres Layouts utiles

3.2.1 – FlowPane

Le FlowPane est un conteneur qui organise ses Ă©lĂ©ments enfants en flux, c'est-Ă -dire qu'il les place les uns aprĂšs les autres et passe automatiquement Ă  la ligne suivante (ou colonne suivante) quand l'espace disponible est insuffisant. C'est le layout idĂ©al pour crĂ©er des galeries d'images, des listes de tags, ou des Ă©lĂ©ments qui doivent s'adapter automatiquement Ă  la taille de la fenĂȘtre.

🎯 Qu'est-ce qu'un FlowPane ?

Le FlowPane est un conteneur qui :

  • Organise en flux : Place les Ă©lĂ©ments les uns aprĂšs les autres, horizontalement ou verticalement
  • Passe Ă  la ligne automatiquement : Quand l'espace est insuffisant, les Ă©lĂ©ments passent Ă  la ligne suivante
  • GĂšre l'espacement : Permet de dĂ©finir un espacement uniforme entre les Ă©lĂ©ments
  • S'adapte au redimensionnement : Les Ă©lĂ©ments se rĂ©organisent automatiquement quand la fenĂȘtre change de taille
Analogie : Le FlowPane est comme un texte qui se justifie automatiquement. Les mots (éléments) s'alignent sur une ligne, et quand il n'y a plus de place, ils passent à la ligne suivante.

📐 Cas d'utilisation du FlowPane

Le FlowPane est particuliĂšrement utile pour :

  • Galeries d'images : Afficher des images qui s'adaptent Ă  la largeur disponible
  • Listes de tags : Afficher des tags ou badges qui s'organisent automatiquement
  • Boutons dynamiques : CrĂ©er des barres d'outils qui s'adaptent Ă  la taille
  • ÉlĂ©ments de taille variable : Quand les Ă©lĂ©ments ont des tailles diffĂ©rentes
  • Interfaces responsives : CrĂ©er des interfaces qui s'adaptent Ă  diffĂ©rentes tailles d'Ă©cran

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

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

Étape 1 : Ajouter un FlowPane

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

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

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

  • Orientation : HORIZONTAL (Ă©lĂ©ments de gauche Ă  droite) ou VERTICAL (Ă©lĂ©ments de haut en bas)
  • Hgap : Espacement horizontal entre les Ă©lĂ©ments (en pixels)
  • Vgap : Espacement vertical entre les lignes/colonnes (en pixels)
  • Alignment : Alignement des Ă©lĂ©ments dans le conteneur
  • Column Halignment : Alignement horizontal des colonnes (pour orientation VERTICAL)
  • Row Valignment : Alignement vertical des lignes (pour orientation HORIZONTAL)

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

Pour ajouter des composants dans le FlowPane :

  1. Glissez-déposez des composants (Button, Label, ImageView, etc.) depuis la Library dans le FlowPane
  2. Les composants s'organisent automatiquement en flux
  3. Quand vous redimensionnez le FlowPane, les éléments se réorganisent automatiquement

📝 Exemple pratique : Galerie d'images avec FlowPane

Créons une galerie d'images simple qui s'adapte à la largeur disponible :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Ajoutez un Label : "Galerie d'images" (titre)
  3. Ajoutez un FlowPane dans le VBox et configurez :
    • Orientation = HORIZONTAL
    • Hgap = 10
    • Vgap = 10
    • Padding = 10
  4. Dans le FlowPane, ajoutez plusieurs ImageView ou Button :
    • Chaque Ă©lĂ©ment reprĂ©sente une image de la galerie
    • Les Ă©lĂ©ments s'organisent automatiquement en lignes
    • Quand vous redimensionnez, les Ă©lĂ©ments passent Ă  la ligne suivante si nĂ©cessaire
Résultat visuel :
Vous obtenez une galerie d'images oĂč les Ă©lĂ©ments s'organisent horizontalement. Quand la largeur disponible est insuffisante, les Ă©lĂ©ments passent automatiquement Ă  la ligne suivante, crĂ©ant un effet de "flux" adaptatif.

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="Galerie d'images" style="-fx-font-size: 18px; -fx-font-weight: bold;"/>
      <FlowPane hgap="10.0" vgap="10.0" orientation="HORIZONTAL">
         <padding>
            <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
         </padding>
         <children>
            <Button text="Image 1" prefWidth="100.0" prefHeight="100.0"/>
            <Button text="Image 2" prefWidth="100.0" prefHeight="100.0"/>
            <Button text="Image 3" prefWidth="100.0" prefHeight="100.0"/>
            <Button text="Image 4" prefWidth="100.0" prefHeight="100.0"/>
            <Button text="Image 5" prefWidth="100.0" prefHeight="100.0"/>
            <Button text="Image 6" prefWidth="100.0" prefHeight="100.0"/>
         </children>
      </FlowPane>
   </children>
</VBox>
Explication du code FXML :
‱ <FlowPane hgap="10.0" vgap="10.0" orientation="HORIZONTAL"> : CrĂ©e un FlowPane avec espacement de 10px et orientation horizontale
‱ Les boutons sont placĂ©s les uns aprĂšs les autres horizontalement
‱ Quand la largeur est insuffisante, les boutons passent automatiquement à la ligne suivante
‱ L'espacement est uniforme grñce à hgap et vgap

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

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

Propriétés de base (onglet Properties)

  • Orientation : HORIZONTAL (flux horizontal) ou VERTICAL (flux vertical)
  • Hgap : Espacement horizontal entre les Ă©lĂ©ments (en pixels)
  • Vgap : Espacement vertical entre les lignes/colonnes (en pixels)

Propriétés de layout (onglet Layout)

  • Alignment : Alignement gĂ©nĂ©ral des Ă©lĂ©ments dans le conteneur
  • Column Halignment : Alignement horizontal des colonnes (pour orientation VERTICAL)
  • Row Valignment : Alignement vertical des lignes (pour orientation HORIZONTAL)
  • Padding : Marge intĂ©rieure autour du contenu

💡 Bonnes pratiques avec FlowPane

  • Utilisez pour des Ă©lĂ©ments de taille variable : FlowPane est parfait quand les Ă©lĂ©ments ont des tailles diffĂ©rentes
  • Pensez Ă  l'espacement : Utilisez des valeurs cohĂ©rentes pour hgap et vgap
  • Orientation horizontale par dĂ©faut : HORIZONTAL est le plus courant pour les galeries et listes
  • Testez le redimensionnement : VĂ©rifiez que les Ă©lĂ©ments se rĂ©organisent correctement quand vous redimensionnez
  • Combinez avec ScrollPane : Pour des listes longues, enveloppez le FlowPane dans un ScrollPane
Important : Le FlowPane est différent du HBox/VBox car il passe automatiquement à la ligne suivante. Utilisez FlowPane quand vous voulez que les éléments s'adaptent à l'espace disponible, et HBox/VBox quand vous voulez un alignement strict en une seule ligne/colonne.

🔄 FlowPane vs autres layouts

Comparons le FlowPane avec d'autres layouts similaires :

  • FlowPane vs HBox : FlowPane passe Ă  la ligne, HBox garde tout sur une ligne
  • FlowPane vs VBox : FlowPane passe Ă  la colonne, VBox garde tout en une colonne
  • FlowPane vs TilePane : FlowPane adapte la taille, TilePane utilise des tuiles de taille fixe

3.2.2 – TilePane

Le TilePane est un conteneur qui organise ses Ă©lĂ©ments enfants en tuiles (tiles) de taille uniforme. Contrairement au FlowPane qui adapte la taille des Ă©lĂ©ments, le TilePane crĂ©e une grille rĂ©guliĂšre oĂč chaque Ă©lĂ©ment occupe la mĂȘme taille. C'est le layout idĂ©al pour crĂ©er des grilles de boutons, des tableaux de bord avec widgets uniformes, ou des galeries avec des images de mĂȘme taille.

🎯 Qu'est-ce qu'un TilePane ?

Le TilePane est un conteneur qui :

  • Organise en tuiles : Place les Ă©lĂ©ments dans une grille de tuiles de taille uniforme
  • Taille fixe des tuiles : Tous les Ă©lĂ©ments occupent la mĂȘme taille (largeur et hauteur)
  • GĂšre l'espacement : Permet de dĂ©finir un espacement uniforme entre les tuiles
  • Passe Ă  la ligne automatiquement : CrĂ©e de nouvelles lignes/colonnes quand nĂ©cessaire
Analogie : Le TilePane est comme un carrelage. Chaque carreau (Ă©lĂ©ment) a exactement la mĂȘme taille, et ils s'organisent en grille rĂ©guliĂšre.

📐 Cas d'utilisation du TilePane

Le TilePane est particuliĂšrement utile pour :

  • Grilles de boutons : CrĂ©er des grilles de boutons uniformes (calculatrice, clavier virtuel)
  • Tableaux de bord : Afficher des widgets de mĂȘme taille en grille
  • Galeries uniformes : Afficher des images ou cartes de mĂȘme taille
  • Interfaces de sĂ©lection : CrĂ©er des grilles de sĂ©lection avec Ă©lĂ©ments uniformes
  • Organisation rĂ©guliĂšre : Quand vous voulez une apparence trĂšs structurĂ©e et uniforme

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

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

Étape 1 : Ajouter un TilePane

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

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

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

  • Orientation : HORIZONTAL (tuiles de gauche Ă  droite) ou VERTICAL (tuiles de haut en bas)
  • Pref Tile Width : Largeur prĂ©fĂ©rĂ©e de chaque tuile (en pixels)
  • Pref Tile Height : Hauteur prĂ©fĂ©rĂ©e de chaque tuile (en pixels)
  • Hgap : Espacement horizontal entre les tuiles (en pixels)
  • Vgap : Espacement vertical entre les tuiles (en pixels)
  • Tile Alignment : Alignement des Ă©lĂ©ments dans chaque tuile

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

Pour ajouter des composants dans le TilePane :

  1. Glissez-déposez des composants (Button, Label, etc.) depuis la Library dans le TilePane
  2. Chaque Ă©lĂ©ment occupe automatiquement la taille dĂ©finie (Pref Tile Width × Pref Tile Height)
  3. Les éléments s'organisent en grille réguliÚre

📝 Exemple pratique : Grille de boutons avec TilePane

Créons une grille de boutons uniforme (comme une calculatrice) :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Ajoutez un TextField en haut (pour l'affichage de la calculatrice)
  3. Ajoutez un TilePane dans le VBox et configurez :
    • Orientation = HORIZONTAL
    • Pref Tile Width = 60
    • Pref Tile Height = 60
    • Hgap = 5
    • Vgap = 5
    • Padding = 10
  4. Dans le TilePane, ajoutez plusieurs Button :
    • Chaque bouton occupe exactement 60×60 pixels
    • Les boutons s'organisent en grille rĂ©guliĂšre
    • Exemple : boutons "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "-", etc.
Résultat visuel :
Vous obtenez une grille de boutons parfaitement alignĂ©e oĂč chaque bouton a exactement la mĂȘme taille. Les boutons s'organisent en lignes et colonnes rĂ©guliĂšres, crĂ©ant une apparence trĂšs structurĂ©e.

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="10.0" right="10.0" bottom="10.0" left="10.0"/>
   </padding>
   <children>
      <TextField promptText="0" prefWidth="250.0"/>
      <TilePane hgap="5.0" vgap="5.0" prefTileWidth="60.0" prefTileHeight="60.0" orientation="HORIZONTAL">
         <padding>
            <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
         </padding>
         <children>
            <Button text="1" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="2" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="3" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="4" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="5" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="6" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="7" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="8" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="9" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="0" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="+" prefWidth="60.0" prefHeight="60.0"/>
            <Button text="-" prefWidth="60.0" prefHeight="60.0"/>
         </children>
      </TilePane>
   </children>
</VBox>
Explication du code FXML :
‱ prefTileWidth="60.0" prefTileHeight="60.0" : DĂ©finit la taille uniforme de chaque tuile (60×60 pixels)
‱ Tous les boutons occupent exactement la mĂȘme taille, crĂ©ant une grille rĂ©guliĂšre
‱ Les boutons s'organisent en lignes horizontales avec un espacement de 5 pixels
‱ Quand il n'y a plus de place sur une ligne, les boutons passent à la ligne suivante

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

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

Propriétés de base (onglet Properties)

  • Orientation : HORIZONTAL (tuiles de gauche Ă  droite) ou VERTICAL (tuiles de haut en bas)
  • Pref Tile Width : Largeur de chaque tuile (en pixels)
  • Pref Tile Height : Hauteur de chaque tuile (en pixels)
  • Hgap : Espacement horizontal entre les tuiles (en pixels)
  • Vgap : Espacement vertical entre les tuiles (en pixels)

Propriétés de layout (onglet Layout)

  • Tile Alignment : Alignement des Ă©lĂ©ments dans chaque tuile (TOP_LEFT, CENTER, etc.)
  • Alignment : Alignement gĂ©nĂ©ral du TilePane dans son conteneur parent
  • Padding : Marge intĂ©rieure autour du contenu

💡 Bonnes pratiques avec TilePane

  • Utilisez pour des Ă©lĂ©ments uniformes : TilePane est parfait quand tous les Ă©lĂ©ments doivent avoir la mĂȘme taille
  • DĂ©finissez la taille des tuiles : Pensez Ă  la taille optimale pour vos Ă©lĂ©ments
  • Pensez Ă  l'espacement : Utilisez des valeurs cohĂ©rentes pour hgap et vgap
  • Testez avec diffĂ©rents nombres d'Ă©lĂ©ments : VĂ©rifiez que la grille reste cohĂ©rente
  • Combinez avec ScrollPane : Pour des grilles longues, enveloppez le TilePane dans un ScrollPane
Important : Le TilePane force tous les Ă©lĂ©ments Ă  avoir la mĂȘme taille. Si vous avez besoin d'Ă©lĂ©ments de tailles diffĂ©rentes, utilisez FlowPane Ă  la place.

🔄 TilePane vs autres layouts

Comparons le TilePane avec d'autres layouts similaires :

  • TilePane vs FlowPane : TilePane utilise des tuiles de taille fixe, FlowPane adapte la taille
  • TilePane vs GridPane : TilePane organise automatiquement, GridPane nĂ©cessite des indices de ligne/colonne
  • TilePane vs HBox/VBox : TilePane crĂ©e une grille, HBox/VBox sont linĂ©aires

3.2.3 – StackPane

Le StackPane est un conteneur qui superpose ses Ă©lĂ©ments enfants les uns par-dessus les autres, comme une pile de cartes. Tous les Ă©lĂ©ments sont positionnĂ©s au mĂȘme endroit, et seul l'Ă©lĂ©ment du dessus est visible. C'est le layout idĂ©al pour crĂ©er des overlays, des Ă©lĂ©ments superposĂ©s, des indicateurs de statut, ou des interfaces avec des couches.

🎯 Qu'est-ce qu'un StackPane ?

Le StackPane est un conteneur qui :

  • Superpose les Ă©lĂ©ments : Place tous les Ă©lĂ©ments enfants au mĂȘme endroit, les uns par-dessus les autres
  • Ordre de superposition : Le dernier Ă©lĂ©ment ajoutĂ© est au-dessus (visible)
  • GĂšre l'alignement : Permet d'aligner les Ă©lĂ©ments superposĂ©s
  • Utile pour les overlays : Parfait pour crĂ©er des Ă©lĂ©ments qui se superposent Ă  d'autres
Analogie : Le StackPane est comme une pile de cartes. Toutes les cartes sont au mĂȘme endroit, mais vous ne voyez que la carte du dessus. Vous pouvez retirer la carte du dessus pour voir celle en dessous.

📐 Cas d'utilisation du StackPane

Le StackPane est particuliĂšrement utile pour :

  • Overlays et popups : Superposer des Ă©lĂ©ments par-dessus d'autres
  • Indicateurs de statut : Afficher des badges ou icĂŽnes sur des Ă©lĂ©ments
  • ÉlĂ©ments de fond : CrĂ©er des arriĂšre-plans avec des Ă©lĂ©ments par-dessus
  • Interfaces en couches : Organiser des Ă©lĂ©ments en plusieurs couches visuelles
  • ÉlĂ©ments centrĂ©s : Centrer facilement un Ă©lĂ©ment sur un autre

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

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

Étape 1 : Ajouter un StackPane

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

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

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

  • Alignment : Alignement des Ă©lĂ©ments superposĂ©s (CENTER, TOP_LEFT, etc.)
  • Pref Width / Pref Height : Taille prĂ©fĂ©rĂ©e du conteneur

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

Pour ajouter des composants dans le StackPane :

  1. Glissez-déposez des composants depuis la Library dans le StackPane
  2. Les éléments se superposent automatiquement
  3. Le dernier élément ajouté est visible au-dessus
  4. Vous pouvez réorganiser l'ordre dans la vue hiérarchique

📝 Exemple pratique : Image avec badge avec StackPane

Créons une image avec un badge de statut superposé :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Ajoutez un StackPane dans le VBox et configurez :
    • Pref Width = 200
    • Pref Height = 200
    • Alignment = CENTER
  3. Dans le StackPane, ajoutez les éléments suivants (dans l'ordre) :
    • Un Rectangle ou ImageView (fond/image principale)
    • Un Label avec texte "Nouveau" et style avec fond colorĂ© (badge)
    • Positionnez le Label en haut Ă  droite en utilisant l'alignement ou les marges
Résultat visuel :
Vous obtenez une image avec un badge "Nouveau" superposé en haut à droite. Le badge est visible par-dessus l'image grùce à la superposition du StackPane.

Exemple

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?>
<?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>
      <StackPane prefWidth="200.0" prefHeight="200.0" alignment="CENTER">
         <children>
            <Rectangle width="200.0" height="200.0" fill="#e0e0e0" arcWidth="10.0" arcHeight="10.0"/>
            <Label text="Nouveau" style="-fx-background-color: red; -fx-text-fill: white; -fx-padding: 5px;" 
                   StackPane.alignment="TOP_RIGHT">
               <StackPane.margin>
                  <Insets top="10.0" right="10.0"/>
               </StackPane.margin>
            </Label>
         </children>
      </StackPane>
   </children>
</VBox>
Explication du code FXML :
‱ <StackPane> : Conteneur qui superpose les Ă©lĂ©ments
‱ <Rectangle> : ÉlĂ©ment de fond (image ou forme)
‱ <Label> : Badge superposĂ© avec StackPane.alignment="TOP_RIGHT" pour le positionner
‱ <StackPane.margin> : Marge pour espacer le badge du bord
‱ Les Ă©lĂ©ments sont superposĂ©s, le Label Ă©tant visible par-dessus le Rectangle

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

Voici les propriétés les plus utilisées pour configurer un StackPane 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 de layout (onglet Layout)

  • Alignment : Alignement des Ă©lĂ©ments superposĂ©s (TOP_LEFT, TOP_CENTER, TOP_RIGHT, CENTER_LEFT, CENTER, CENTER_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT)

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

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

  • Alignment : Alignement spĂ©cifique de cet Ă©lĂ©ment dans le StackPane
  • Margin : Marge autour de l'Ă©lĂ©ment

💡 Bonnes pratiques avec StackPane

  • Utilisez pour la superposition : StackPane est parfait quand vous voulez superposer des Ă©lĂ©ments
  • Pensez Ă  l'ordre : L'ordre dans la hiĂ©rarchie dĂ©termine quel Ă©lĂ©ment est au-dessus
  • Utilisez l'alignement : Alignez les Ă©lĂ©ments superposĂ©s selon vos besoins
  • Combinez avec d'autres layouts : StackPane peut contenir d'autres layouts pour des structures complexes
  • Attention Ă  la visibilitĂ© : Seul l'Ă©lĂ©ment du dessus est visible, assurez-vous que c'est celui que vous voulez
Important : Le StackPane superpose tous les Ă©lĂ©ments au mĂȘme endroit. Si vous voulez organiser des Ă©lĂ©ments cĂŽte Ă  cĂŽte ou en colonnes, utilisez HBox, VBox ou GridPane Ă  la place.

🔄 StackPane vs autres layouts

Comparons le StackPane avec d'autres layouts similaires :

  • StackPane vs Pane : StackPane superpose automatiquement, Pane permet un positionnement libre
  • StackPane vs Group : StackPane gĂšre l'alignement, Group est un simple conteneur
  • StackPane vs VBox/HBox : StackPane superpose, VBox/HBox organisent linĂ©airement

3.2.4 – Pane (layout libre)

Le Pane est un conteneur qui permet un positionnement absolu et libre de ses Ă©lĂ©ments enfants. Contrairement aux autres layouts qui organisent automatiquement les Ă©lĂ©ments, le Pane vous donne un contrĂŽle total sur la position de chaque Ă©lĂ©ment en utilisant des coordonnĂ©es X et Y. C'est le layout idĂ©al pour crĂ©er des interfaces avec positionnement prĂ©cis, des dessins, ou des Ă©lĂ©ments qui doivent ĂȘtre placĂ©s Ă  des positions exactes.

🎯 Qu'est-ce qu'un Pane ?

Le Pane est un conteneur qui :

  • Permet le positionnement libre : Vous placez chaque Ă©lĂ©ment Ă  une position exacte (X, Y)
  • N'organise pas automatiquement : Les Ă©lĂ©ments restent oĂč vous les placez
  • Utilise LayoutX et LayoutY : CoordonnĂ©es absolues pour positionner les Ă©lĂ©ments
  • Offre un contrĂŽle total : Parfait pour des interfaces avec positionnement prĂ©cis
Analogie : Le Pane est comme une feuille de papier vierge. Vous pouvez placer n'importe quel Ă©lĂ©ment n'importe oĂč, avec des coordonnĂ©es prĂ©cises, comme sur un plan de coordonnĂ©es.

📐 Cas d'utilisation du Pane

Le Pane est particuliĂšrement utile pour :

  • Interfaces avec positionnement prĂ©cis : Quand vous avez besoin d'un contrĂŽle total sur la position
  • Dessins et graphiques : CrĂ©er des formes et Ă©lĂ©ments positionnĂ©s prĂ©cisĂ©ment
  • Interfaces de jeu : Positionner des Ă©lĂ©ments de jeu Ă  des coordonnĂ©es exactes
  • Diagrammes : CrĂ©er des diagrammes avec Ă©lĂ©ments positionnĂ©s
  • Interfaces personnalisĂ©es : Quand les autres layouts ne suffisent pas

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

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

Étape 1 : Ajouter un Pane

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

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

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

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

Étape 3 : Ajouter et positionner des Ă©lĂ©ments dans le Pane

Pour ajouter et positionner des composants dans le Pane :

  1. Glissez-déposez des composants depuis la Library dans le Pane
  2. Sélectionnez chaque élément et, dans l'onglet Layout, configurez :
    • Layout X : Position X (distance depuis la gauche, en pixels)
    • Layout Y : Position Y (distance depuis le haut, en pixels)
  3. Vous pouvez aussi glisser les éléments directement dans la zone de conception pour les positionner visuellement

📝 Exemple pratique : Interface avec positionnement libre

Créons une interface simple avec des éléments positionnés précisément :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un Pane comme racine
  2. Configurez le Pane :
    • Pref Width = 400
    • Pref Height = 300
  3. Dans le Pane, ajoutez les éléments suivants avec leurs positions :
    • Label "Titre" : Layout X = 50, Layout Y = 20
    • Button "Bouton 1" : Layout X = 50, Layout Y = 100
    • Button "Bouton 2" : Layout X = 200, Layout Y = 100
    • TextField : Layout X = 50, Layout Y = 150, Pref Width = 300
Résultat visuel :
Vous obtenez une interface oĂč chaque Ă©lĂ©ment est positionnĂ© exactement oĂč vous l'avez placĂ©. Les Ă©lĂ©ments ne se rĂ©organisent pas automatiquement - ils restent Ă  leurs positions fixes.

Exemple

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

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

<Pane prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Label layoutX="50.0" layoutY="20.0" text="Titre" style="-fx-font-size: 18px; -fx-font-weight: bold;"/>
      <Button layoutX="50.0" layoutY="100.0" text="Bouton 1"/>
      <Button layoutX="200.0" layoutY="100.0" text="Bouton 2"/>
      <TextField layoutX="50.0" layoutY="150.0" prefWidth="300.0" promptText="Entrez du texte"/>
   </children>
</Pane>
Explication du code FXML :
‱ <Pane> : Conteneur avec positionnement libre
‱ layoutX="50.0" : Position X de l'Ă©lĂ©ment (50 pixels depuis la gauche)
‱ layoutY="20.0" : Position Y de l'Ă©lĂ©ment (20 pixels depuis le haut)
‱ Chaque Ă©lĂ©ment a des coordonnĂ©es absolues et reste Ă  sa position exacte
‱ Les Ă©lĂ©ments ne se rĂ©organisent pas lors du redimensionnement

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

Voici les propriétés les plus utilisées pour configurer un Pane 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 le Pane (onglet Layout)

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

  • Layout X : Position X absolue (distance depuis la gauche, en pixels)
  • Layout Y : Position Y absolue (distance depuis le haut, en pixels)

💡 Bonnes pratiques avec Pane

  • Utilisez pour le positionnement prĂ©cis : Pane est parfait quand vous avez besoin de positions exactes
  • Évitez si possible : Les autres layouts sont gĂ©nĂ©ralement plus maintenables
  • Pensez au redimensionnement : Les Ă©lĂ©ments ne s'adaptent pas automatiquement, testez avec diffĂ©rentes tailles
  • Utilisez pour des cas spĂ©cifiques : Dessins, jeux, diagrammes oĂč le positionnement prĂ©cis est nĂ©cessaire
  • Combinez avec d'autres layouts : Utilisez Pane pour des parties spĂ©cifiques, pas pour toute l'interface
Important : Le Pane utilise un positionnement absolu. Les Ă©lĂ©ments ne s'adaptent pas au redimensionnement de la fenĂȘtre. Si vous avez besoin d'Ă©lĂ©ments qui s'adaptent, utilisez AnchorPane (avec ancres) ou d'autres layouts Ă  la place.

🔄 Pane vs autres layouts

Comparons le Pane avec d'autres layouts similaires :

  • Pane vs AnchorPane : Pane utilise des coordonnĂ©es absolues, AnchorPane utilise des ancres qui s'adaptent
  • Pane vs GridPane : Pane permet un positionnement libre, GridPane organise en grille
  • Pane vs VBox/HBox : Pane est libre, VBox/HBox organisent automatiquement

3.2.5 – ScrollPane

Le ScrollPane est un conteneur qui ajoute des barres de défilement (scrollbars) à son contenu. Quand le contenu est plus grand que l'espace disponible, le ScrollPane permet de faire défiler pour voir le reste du contenu. C'est le layout idéal pour afficher du contenu long, des listes, des images grandes, ou tout élément qui peut dépasser de l'espace disponible.

🎯 Qu'est-ce qu'un ScrollPane ?

Le ScrollPane est un conteneur qui :

  • Ajoute le dĂ©filement : Permet de faire dĂ©filer le contenu avec des barres de dĂ©filement
  • GĂšre le viewport : Affiche seulement la partie visible du contenu
  • Barres de dĂ©filement automatiques : Les barres apparaissent automatiquement quand nĂ©cessaire
  • Peut contenir n'importe quel Node : Accepte un seul Ă©lĂ©ment enfant (souvent un layout)
Analogie : Le ScrollPane est comme une fenĂȘtre avec des barres de dĂ©filement. Vous voyez seulement une partie du contenu Ă  travers la fenĂȘtre, et vous pouvez faire dĂ©filer pour voir le reste.

📐 Cas d'utilisation du ScrollPane

Le ScrollPane est particuliĂšrement utile pour :

  • Contenu long : Afficher du texte, des listes ou des images qui dĂ©passent
  • Listes dĂ©filables : CrĂ©er des listes avec beaucoup d'Ă©lĂ©ments
  • Images grandes : Afficher des images plus grandes que l'espace disponible
  • Formulaires longs : CrĂ©er des formulaires avec beaucoup de champs
  • Zones de texte : Ajouter le dĂ©filement Ă  des TextArea ou autres composants

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

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

Étape 1 : Ajouter un ScrollPane

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

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

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

  • Pref Viewport Width : Largeur de la zone visible (viewport)
  • Pref Viewport Height : Hauteur de la zone visible (viewport)
  • Hbar Policy : Politique de la barre de dĂ©filement horizontale (AS_NEEDED, ALWAYS, NEVER)
  • Vbar Policy : Politique de la barre de dĂ©filement verticale (AS_NEEDED, ALWAYS, NEVER)
  • Fit To Width : Ajuster le contenu Ă  la largeur (pour les images)
  • Fit To Height : Ajuster le contenu Ă  la hauteur (pour les images)

Étape 3 : Ajouter du contenu dans le ScrollPane

Pour ajouter du contenu dans le ScrollPane :

  1. Le ScrollPane ne peut contenir qu'un seul élément enfant
  2. Glissez-déposez un layout (VBox, HBox, GridPane, etc.) ou un composant dans le ScrollPane
  3. Ajoutez votre contenu dans ce layout
  4. Si le contenu dépasse, les barres de défilement apparaissent automatiquement

📝 Exemple pratique : Liste dĂ©filable avec ScrollPane

Créons une liste d'éléments défilable :

Dans Scene Builder :

  1. Créez un nouveau fichier FXML avec un VBox comme racine
  2. Ajoutez un Label : "Liste d'éléments" (titre)
  3. Ajoutez un ScrollPane dans le VBox et configurez :
    • Pref Viewport Width = 300
    • Pref Viewport Height = 200
    • Vbar Policy = AS_NEEDED
    • Hbar Policy = NEVER
  4. Dans le ScrollPane, ajoutez un VBox et configurez :
    • Spacing = 5
    • Padding = 10
  5. Dans ce VBox, ajoutez plusieurs Label ou Button :
    • Ajoutez suffisamment d'Ă©lĂ©ments pour que la liste dĂ©passe la hauteur du ScrollPane
    • Exemple : "ÉlĂ©ment 1", "ÉlĂ©ment 2", "ÉlĂ©ment 3", etc.
Résultat visuel :
Vous obtenez une liste défilable. Quand le contenu dépasse la hauteur du ScrollPane, une barre de défilement verticale apparaßt automatiquement, permettant de faire défiler pour voir tous les éléments.

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="Liste d'éléments" style="-fx-font-size: 18px; -fx-font-weight: bold;"/>
      <ScrollPane prefViewportWidth="300.0" prefViewportHeight="200.0" 
                  vbarPolicy="AS_NEEDED" hbarPolicy="NEVER">
         <content>
            <VBox spacing="5.0">
               <padding>
                  <Insets top="10.0" right="10.0" bottom="10.0" left="10.0"/>
               </padding>
               <children>
                  <Label text="ÉlĂ©ment 1"/>
                  <Label text="ÉlĂ©ment 2"/>
                  <Label text="ÉlĂ©ment 3"/>
                  <Label text="ÉlĂ©ment 4"/>
                  <Label text="ÉlĂ©ment 5"/>
                  <Label text="ÉlĂ©ment 6"/>
                  <Label text="ÉlĂ©ment 7"/>
                  <Label text="ÉlĂ©ment 8"/>
                  <Label text="ÉlĂ©ment 9"/>
                  <Label text="ÉlĂ©ment 10"/>
               </children>
            </VBox>
         </content>
      </ScrollPane>
   </children>
</VBox>
Explication du code FXML :
‱ <ScrollPane prefViewportWidth="300.0" prefViewportHeight="200.0"> : CrĂ©e un ScrollPane avec une zone visible de 300×200 pixels
‱ vbarPolicy="AS_NEEDED" : La barre de dĂ©filement verticale apparaĂźt seulement si nĂ©cessaire
‱ hbarPolicy="NEVER" : La barre de dĂ©filement horizontale n'apparaĂźt jamais
‱ <content> : Contient le VBox avec les Ă©lĂ©ments de la liste
‱ Quand le contenu dĂ©passe 200 pixels de hauteur, la barre de dĂ©filement apparaĂźt automatiquement

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

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

Propriétés de base (onglet Properties)

  • Pref Viewport Width : Largeur de la zone visible (en pixels)
  • Pref Viewport Height : Hauteur de la zone visible (en pixels)
  • Hbar Policy : Politique de la barre horizontale (AS_NEEDED, ALWAYS, NEVER)
  • Vbar Policy : Politique de la barre verticale (AS_NEEDED, ALWAYS, NEVER)
  • Fit To Width : Ajuster le contenu Ă  la largeur (utile pour les images)
  • Fit To Height : Ajuster le contenu Ă  la hauteur (utile pour les images)

Politiques des barres de défilement

  • AS_NEEDED : La barre apparaĂźt seulement si le contenu dĂ©passe (recommandĂ©)
  • ALWAYS : La barre est toujours visible, mĂȘme si pas nĂ©cessaire
  • NEVER : La barre n'apparaĂźt jamais, mĂȘme si le contenu dĂ©passe

💡 Bonnes pratiques avec ScrollPane

  • Utilisez AS_NEEDED : C'est la politique la plus courante et la plus intuitive
  • Contenu unique : Le ScrollPane ne peut contenir qu'un seul Ă©lĂ©ment, utilisez un layout comme conteneur
  • DĂ©finissez la taille du viewport : SpĂ©cifiez prefViewportWidth et prefViewportHeight
  • Combinez avec d'autres layouts : Enveloppez VBox, HBox, GridPane, etc. dans un ScrollPane
  • Testez avec beaucoup de contenu : VĂ©rifiez que le dĂ©filement fonctionne correctement
Important : Le ScrollPane ne peut contenir qu'un seul élément enfant. Si vous voulez plusieurs éléments défilables, placez-les dans un layout (VBox, HBox, etc.) et mettez ce layout dans le ScrollPane.

🔄 ScrollPane vs autres layouts

Comparons le ScrollPane avec d'autres layouts similaires :

  • ScrollPane vs autres layouts : ScrollPane ajoute le dĂ©filement, les autres layouts organisent le contenu
  • ScrollPane est complĂ©mentaire : Il s'utilise avec d'autres layouts pour ajouter le dĂ©filement
  • ScrollPane vs ListView : ScrollPane est gĂ©nĂ©rique, ListView est spĂ©cialisĂ© pour les listes
Conseil : Le ScrollPane est souvent utilisĂ© pour envelopper d'autres layouts. Par exemple, un VBox avec beaucoup d'Ă©lĂ©ments peut ĂȘtre placĂ© dans un ScrollPane pour permettre le dĂ©filement.