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 :
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!