Maison >Java >javaDidacticiel >Comment GroupLayout de Swing peut-il gérer efficacement le redimensionnement des composants et les limites de taille dans les formulaires générés dynamiquement ?

Comment GroupLayout de Swing peut-il gérer efficacement le redimensionnement des composants et les limites de taille dans les formulaires générés dynamiquement ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-02 06:37:09755parcourir

How Can Swing's GroupLayout Effectively Manage Component Resizing and Size Limits in Dynamically Generated Forms?

Swing GroupLayout : gestion du redimensionnement et de la limitation des composants

Dans Swing, GroupLayout offre un mécanisme robuste pour gérer la disposition des composants. Cependant, lorsqu'il s'agit de contenu dynamique et de mises en page réactives, il devient nécessaire de contrôler le redimensionnement et la limitation des tailles des composants.

Considérons un scénario dans lequel plusieurs formulaires de saisie de données générés dynamiquement utilisent GroupLayout, avec une mise en page similaire à :

*-----------------------------------------------*
| label A     |   field A                       |
| label B     |   field B                       |
| label C     |   field C                       |
*-----------------------------------------------*

Pour limiter la largeur maximale des étiquettes (instances JLabel) à une fraction spécifique de la largeur du cadre parent, on peut utiliser un ComponentListener :

public void componentResized(ComponentEvent e) {
    int maxW = parentFrame.getWidth() / 3;
    for (JLabel l : labels) {
        l.setMaximumSize( // have also tried setSize() and setPreferredSize()
            new Dimension(
                Math.min(l.getSize().width, maxW),
                l.getMaximumSize().height));
    }
    groupLayout.invalidateLayout(getContentSpace());
}

Cependant, cette approche peut ne pas donner les résultats souhaités.

Solution proposée : exploiter la taille préférée de GroupLayout

GroupLayout fournit un solution plus élégante en s'appuyant sur la taille préférée du étiquettes :

public class GroupPanel extends JPanel {
    // ...
    // Create a GroupLayout and set group constraints
    GroupLayout layout = new GroupLayout(this);
    this.setLayout(layout);
    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);
    layout.setHorizontalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
            .addComponent(label1)
            .addComponent(label2)
            .addComponent(label3))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addComponent(field1)
            .addComponent(field2)
            .addComponent(field3))
    );
    layout.setVerticalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label1)
            .addComponent(field1))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label2)
            .addComponent(field2))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label3)
            .addComponent(field3))
    );
    // ...
}

Avantages de cette approche :

  • L'espace alloué aux étiquettes peut accueillir même l'étiquette la plus large.
  • Le texte les champs sont redimensionnables de manière appropriée.
  • Le comportement est cohérent sur toutes les plates-formes et polices.
  • GroupLayout gère automatiquement une grande partie du comportement de redimensionnement, minimisant ainsi le besoin d'ajustements manuels.

En utilisant le mécanisme de taille préférée, GroupLayout fournit un moyen simple et efficace de gérer les composants. redimensionnement et limites dans les formulaires de saisie de données générés dynamiquement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn