Swing GroupLayout: Redimensionnement et de limiter les tailles de composants
Je suis en utilisant GroupLayout
pour gérer les composants généré dynamiquement des données de formes d'entrée. La mise en page est plus ou moins comme ceci:
*-----------------------------------------------*
| label A | field A |
| label B | field B |
| label C | field C |
*-----------------------------------------------*
Je suis à l'aide de 2 groupes parallèles pour la mise en page horizontale, et un seul séquentielle groupe pour la mise en page verticale. Pour la plupart, tout fonctionne très bien.
Je veux limiter la largeur maximale de l'étiquette (qui sont des instances de JLabel
) à 1/3 de la largeur du parent JFrame
. Si le JFrame
a une taille fixe, ce serait trivial, mais j'ai à traiter avec elle en cours de redimensionnement.
Je vais chercher des ComponentListener.componentResized()
les événements de la JFrame
mais je suis un peu coincé sur ce qu'il faut faire une fois que je reçois un tel événement.
J'ai essayé cette approche sans un peu de chance:
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());
}
quelqu'un Peut-il suggérer une manière de limiter la largeur des étiquettes qui fonctionne?
Je pourrais probablement reconstruire la mise en page à partir de zéro à chaque fois, mais je me sens comme il devrait y avoir un moyen plus simple.
Est-il une raison pour une étiquette à croître plus grande que la taille de la plus grande étiquette?
Non il n'y en a pas. Je suis désireux de fixer une limite supérieure à la largeur des étiquettes, ne sont pas une limite minimale. Avez édité la question à clarifier cela.
OriginalL'auteur vaughandroid | 2011-12-13
Vous devez vous connecter pour publier un commentaire.
Dans cet exemple,
GroupLayout
pouvez simplement compter sur la taille de l'étiquette, sans avoir eu recours à dessetXXXSize()
méthode. Dans cette approche,L'utilisation de
GroupLayout.Alignment.TRAILING
à droite justifier les étiquettes est une question de préférence personnelle, et j'ai ajouté un deuxième panneau pour montrer comment cela fonctionne imbriquée dans une autre mise en page.Excellent; voir aussi cette (moins souple) exemple.
Voir aussi cette (plus flexible) exemple.
Je suis allé cinq ans entre les utilisations de l'GroupLayout, j'ai donc eu à se référer à nouveau à l'exemple ci-dessus par @trashgod. Il a été un excellent moyen pour me rafraîchir la mémoire sur la façon d'utiliser cette mise en page. Bravo!
OriginalL'auteur trashgod