GroupLayout | Java Swing
GroupLayout regroupe ses composants et les place hiérarchiquement dans un conteneur. Le regroupement est effectué par des instances de la classe Group.
Group est une classe abstraite et deux classes concrètes qui implémentent cette classe sont SequentialGroup et ParallelGroup.
SequentialGroup positionne ses éléments séquentiellement les uns après les autres alors que ParallelGroup aligne ses éléments les uns sur les autres.
La classe GroupLayout fournit des méthodes telles que createParallelGroup() et createSequentialGroup() pour créer des groupes.
GroupLayout traite chaque axe indépendamment. Autrement dit, il existe un groupe représentant l’axe horizontal et un groupe représentant l’axe vertical. Chaque composant doit exister dans un groupe horizontal et vertical, sinon une exception IllegalStateException est levée pendant la mise en page, ou lorsque la taille minimale, préférée ou maximale est demandée.
Le constructeur de la classe GroupLayout :
- GroupLayout(Container c): il est utilisé pour créer un GroupLayout pour le conteneur spécifié.
Les méthodes couramment utilisée de GroupLayout sont les suivantes:
- addLayoutComponent(Component c, Object obj): Notifie qu’un Composant a été ajouté au conteneur parent.
- getHonorsVisibility(): retourne si la visibilité des composants est prise en compte lors du dimensionnement et du positionnement des composants.
- maximumLayoutSize(Container c): renvoie la taille maximale du conteneur spécifié.
- getLayoutAlignmentX(): il renvoie l’alignement de l’axe x.
- minimumLayoutSize(Container c): renvoie la taille minimale pour le conteneur spécifié.
- getLayoutStyle(): renvoie le LayoutStyle utilisé pour calculer l’écart préféré entre les composants.
Exemple:
L’exemple suivant montre l’utilisation de GroupLayout en organisant les composants dans un JFrame. Nous créons les composants suivants: JLabel, JTextField, JButton et JCheckbox. Puis ajoutez-les au JFrame à l’aide de la méthode add(). La disposition est définie à l’aide de la méthode setLayout().
import javax.swing.*; import java.awt.Component; import static javax.swing.GroupLayout.Alignment.*; public class Main { // Méthode principale public static void main(String[] args) { // frame JFrame f = new JFrame("Exemple de GroupLayout"); // label JLabel label = new JLabel("Label:"); // textField JTextField textField = new JTextField(); // button JButton btn1 = new JButton("Bouton 1"); // button JButton btn2 = new JButton("Bouton 2"); // checkBox JCheckBox checkBox1 = new JCheckBox("CheckBox 1"); // checkBox JCheckBox checkBox2 = new JCheckBox("CheckBox 2"); // GroupLayout GroupLayout layout = new GroupLayout(f.getContentPane()); // Définir la disposition des composant dans le frame f.getContentPane().setLayout(layout); // Créer automatiquement des espaces vide layout.setAutoCreateGaps(true); // Créer automatiquement un conteneur des espaces vide layout.setAutoCreateContainerGaps(true); // il sert à définir le groupe horizontal layout.setHorizontalGroup(layout.createSequentialGroup() // Ajouter l'étiquette .addComponent(label) // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(LEADING) // Ajouter le champ de texte .addComponent(textField) // Ajouter le groupe séquentiel .addGroup(layout.createSequentialGroup() // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(LEADING) // Ajouter la 1er case à cocher .addComponent(checkBox1)) // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(LEADING) // Ajouter la 2eme case à cocher .addComponent(checkBox2)))) // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(LEADING) // Ajouter le bouton 1 .addComponent(btn1) // Ajouter le bouton 2 .addComponent(btn2))); //lier la taille des composants quel que soit leur emplacement layout.linkSize(SwingConstants.HORIZONTAL, btn1, btn2); //Créer le groupe vertical layout.setVerticalGroup(layout.createSequentialGroup() // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(BASELINE) // Ajouter l'étiquette .addComponent(label) // Ajouter le champ de texte .addComponent(textField) // Ajouter le bouton 1 .addComponent(btn1)) // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(LEADING) // Ajouter le groupe séquentiel .addGroup(layout.createSequentialGroup() // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(BASELINE) // Ajouter la 1er case à cocher .addComponent(checkBox1) // Ajouter la 2eme case à cocher .addComponent(checkBox2)) // Ajouter le groupe parallèle .addGroup(layout.createParallelGroup(BASELINE))) // Ajouter le bouton 2 .addComponent(btn2) ) ); f.pack(); f.show(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
Sortie: