Maison >Java >javaDidacticiel >Comment puis-je limiter la largeur de JLabel dans GroupLayout de Swing tout en conservant la réactivité au redimensionnement du cadre ?

Comment puis-je limiter la largeur de JLabel dans GroupLayout de Swing tout en conservant la réactivité au redimensionnement du cadre ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-10 10:10:16401parcourir

How Can I Limit JLabel Width in Swing's GroupLayout While Maintaining Responsiveness to Frame Resizing?

Redimensionnement et limitation de la taille des composants dans Swing GroupLayout

GroupLayout de Swing offre une gestion flexible de la mise en page pour les interfaces utilisateur complexes. Cependant, contrôler la taille des composants au sein d'un GroupLayout peut s'avérer difficile lorsqu'il s'agit d'un redimensionnement dynamique. Cet article présentera une solution pour limiter la largeur maximale des étiquettes de composants dans un GroupLayout tout en conservant leur réactivité aux changements de taille de cadre.

Le problème

Envisagez un GroupLayout avec des groupes parallèles pour la disposition horizontale et un groupe séquentiel pour la disposition verticale, comme suit :

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

La tâche est de limiter la largeur des étiquettes (instances de JLabel) à un tiers de la largeur du cadre tandis que le cadre peut être redimensionné.

Solution

1. S'appuyer sur la taille préférée

Au lieu de définir manuellement des contraintes de taille, GroupLayout peut utiliser la taille préférée des étiquettes. Les étiquettes ont une taille préférée par défaut qui s'adapte à leur contenu textuel. Par défaut, GroupLayout respecte ces tailles préférées pour le comportement de redimensionnement des composants.

2. GroupLayout Alignment

Pour justifier à droite les étiquettes, GroupLayout.Alignment.TRAILING peut être utilisé :

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))
);

3. Exemple de code

Le code suivant démontre la mise en œuvre de cette solution :

public class GroupPanel extends JPanel {

    private JLabel label1 = new JLabel("Primary:");
    private JTextField field1 = new JTextField(16);
    private JLabel label2 = new JLabel("Secondary:");
    private JTextField field2 = new JTextField(16);
    private JLabel label3 = new JLabel("Tertiary:");
    private JTextField field3 = new JTextField(16);

    public GroupPanel(int n) {

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