Estoy usando GroupLayout
para administrar componentes en algunos formularios de entrada de datos generados dinámicamente. El diseño es más o menos así:Swing GroupLayout: cambio de tamaño y limitación de tamaños de componentes
*-----------------------------------------------*
| label A | field A |
| label B | field B |
| label C | field C |
*-----------------------------------------------*
estoy usando 2 grupos paralelos para el diseño horizontal, y un solo grupo secuencial para la disposición vertical. En su mayor parte, todo está funcionando bien.
Quiero limitar el ancho máximo de las etiquetas (que son solo casos de JLabel
) a 1/3 del ancho del elemento principal JFrame
. Si el JFrame
tuviera un tamaño fijo, esto sería trivial, pero tengo que lidiar con el cambio de tamaño.
Estoy recogiendo ComponentListener.componentResized()
eventos del JFrame
pero estoy un poco atascado en qué hacer una vez que recibo tal evento.
He intentado este enfoque sin ninguna suerte:
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());
}
¿Puede alguien sugerir una manera de limitar el ancho de las etiquetas que van a trabajar?
Probablemente podría reconstruir el diseño desde cero cada vez, pero creo que debería haber una manera más simple.
no setXXSize nunca: http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi – kleopatra
¿Hay alguna razón para que una etiqueta crezca más grande que el tamaño preferido de la etiqueta más grande? – trashgod
@trashgod No, no hay. Quiero establecer un límite superior en el ancho de las etiquetas, no un límite mínimo. He editado la pregunta para aclararlo. – vaughandroid