Sto utilizzando GroupLayout
per gestire i componenti in alcuni moduli di input di dati generati dinamicamente. Il layout è più o meno in questo modo:Swing GroupLayout: ridimensionamento e limitazione delle dimensioni dei componenti
*-----------------------------------------------*
| label A | field A |
| label B | field B |
| label C | field C |
*-----------------------------------------------*
sto usando 2 gruppi paralleli per la disposizione orizzontale e un singolo gruppo sequenziale per il layout verticale. Per la maggior parte, tutto funziona perfettamente.
Voglio limitare la larghezza massima delle etichette (che sono solo esempi di JLabel
) a 1/3 della larghezza del genitore JFrame
. Se lo JFrame
fosse di dimensioni fisse, sarebbe banale, ma devo gestirlo ridimensionandolo.
Sto ricevendo gli eventi ComponentListener.componentResized()
dallo JFrame
ma sono un po 'bloccato su cosa fare una volta ricevuto questo evento.
Ho provato questo approccio senza alcuna fortuna:
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());
}
Qualcuno può suggerire un modo per limitare la larghezza delle etichette che funzionano?
Probabilmente potrei ricostruire il layout da zero ogni volta, ma sento che dovrebbe esserci un modo più semplice.
non setXXSize mai: http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi – kleopatra
C'è qualche motivo per cui un'etichetta cresce più grande della dimensione preferita dell'etichetta più grande? – trashgod
@trashgod No non c'è. Sto volendo impostare un limite superiore sulla larghezza delle etichette, non un limite minimo. Ho modificato la domanda per renderla più chiara. – vaughandroid