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
Libérer: 2024-12-02 06:37:09
original
689 Les gens l'ont consulté

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                       |
*-----------------------------------------------*
Copier après la connexion

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());
}
Copier après la connexion

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))
    );
    // ...
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal