Pregunta

Tengo que construir un formulario bastante grande con muchos controles. Los controles se dividen en controles / configuraciones básicos y controles / configuraciones extendidos . El usuario puede decidir si quiere ver solo los controles básicos o los controles básicos y extendidos.

Dejé todos los controles extendidos en su propio JPanel para poder cambiar fácilmente entre las dos vistas mostrando u ocultando este panel.

Actualmente estoy usando GroupLayout y lo que sucede es que los controles en diferentes paneles no están alineados:

Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

Desafortunadamente encontré ahora la forma de " sincronizar " los diseños de los dos paneles (excepto usando AbsoluteLayout y coordenadas de control fijas)

  • ¿Hay alguna forma de lograr esto?
  • ¿Todo mi diseño es defectuoso?

EDITAR: si es posible, me gustaría mantener el administrador de GroupLayout.

¿Fue útil?

Solución

Hasta donde yo sé, ningún Swing LayoutManager (de JRE o código abierto) puede abarcar varios paneles.

Actualmente estoy trabajando en una función (que llamé " sincronización de diseños ") para mi DesignGridLayout proyecto, pero no es algo fácil de implementar (he comenzado hace aproximadamente 2 semanas y todavía no veo exactamente si llegaré a algo interesante y cuándo lo haré, pero todavía tengo gran esperanza para ello ;-))

Una opción que podría verificar sería agregar todos los componentes al mismo panel (con un solo GroupLayout entonces) y ocultarlos / mostrarlos según la selección del usuario. Con suerte, GroupLayout adaptará el tamaño a la situación (después de llamar a pack ()).

Si GroupLayout se comporta bien, entonces solo sería cuestión de llamar a pack () cada vez que el usuario cambie su selección para mostrar / ocultar campos extendidos.

De lo contrario, tendría que establecer manualmente el tamaño de su panel cada vez que el usuario cambie su selección.

Otros consejos

Probablemente la forma más fácil (buena) de hacerlo es agregar todos los componentes al panel principal. Establezca los subpaneles en no opacos y agregue también al panel principal. El panel principal necesita un dibujo optimizado para apagarse.

Otra técnica es agregar un componente espaciador. En el panel inferior, agregue un componente en la misma columna que las etiquetas que toma dinámicamente el componente de ancho de sus diversos métodos de tamaño de las etiquetas superiores. Haga lo mismo al revés que el panel superior.

Creo que no hay forma de hacerlo con los administradores de diseño estándar. Probablemente tendrá que escribir su propio administrador de diseño, pero no debería ser demasiado difícil si subclasifica GroupLayout.

Puede usar GridLayout en lugar de GroupLayout, que le proporcionará un espacio uniforme entre las columnas

Si desea mantenerlos en paneles separados con diseños separados:

Itere sobre todas las etiquetas que agregue y encuentre el ancho máximo preferido de cada una. Itere por segunda vez y establezca el tamaño preferido para la altura preferida de cada etiqueta, pero el ancho máximo.

Esta es la explicación de la GridLayout . Esto establecerá cada componente al tamaño, lo espera. Con el objeto GridData puede especificar cómo se ordenan los componentes.

Ejemplos

 texto alternativo
(fuente: sun.com )

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top