2010-08-03 14 views
6

Creé un JFrame inicializado con un BorderLayout y un JScrollPane como su elemento CENTER.FlowLayout de Java no cambia el tamaño correctamente

El panel de desplazamiento está configurado con las políticas VERTICAL_SCROLLBAR_ALWAYS y HORIZONTAL_SCROLLBAR_NEVER. La intención de mi frame es tener un ancho controlado, mientras que la altura debería crecer/contraerse a medida que se agregan/eliminan datos.

Dentro de mi scroll pane, he añadido un simple JPanel (llamémosle el panel de contenido) que se inicializa con un (política y LEADING) FlowLayout.

Para probar esto, simplemente llene mi content panel con 20 JLabel("Item " + n) componentes donde n es el contador de bucles.

Esperaría ver mi labels en una sola fila si el frame es lo suficientemente grande y las etiquetas se ajustan a otras líneas cuando reduzco el ancho. Pero, en cambio, solo se muestra una línea sin envoltura ... alguna vez.

¿Alguien sabe por qué el flow layout no se envuelve cuando un scroll pane está involucrado?

Si quito el scroll pane todos juntos y poner el content panel directamente en la frame, el efecto deseado se produce envoltorio, pero si la altura frame se contrae menor que la altura content panel simplemente desaparece.

La idea es que quiero que mi labels se envuelva cuando sea necesario, pero también siempre estará visible si eso significa tener que desplazarse hacia arriba/abajo.

¿Alguna sugerencia sobre cómo solucionar esto?

Gracias.

Respuesta

9

Wrap Layout da una explicación y una solución.

+0

Parece que funciona exactamente como es necesario/esperado hasta ahora! ¡Esperemos que Oracle invierta más en Swing de lo que Sun estaba dispuesto a hacer! Muchas gracias camickr! – Jeach

+0

¿Diría que FlowLayout tiene errores o cree que Sun intentó hacerlo de esta manera? ¡El WrapLayout tiene mucho más sentido que debería ser parte de Swing! – Jeach

+0

No es un error porque no hay un código que intente recalcular dinámicamente el tamaño preferido. Es solo la forma en que alguien lo diseñó para funcionar. – camickr

0

Si trabaja con el diseñador, debe establecer la propiedad del valor preferido en nulo (eliminar lo que está configurado) y configurar el tamaño preferido haciendo clic en el botón de puntos [...] triples junto al nombre de la propiedad preferida y poner su valor preferido.

Me encontré con el mismo problema y funciona para mí

Cuestiones relacionadas