¿Por qué el administrador de diseño de swing funciona de abajo hacia arriba?

In http://docs.oracle.com/javase/tutorial/uiswing/layout/howLayoutWorks.html Podemos leer :

"El resultado final es que para determinar el mejor tamaño para el contenedor, el sistema determina los tamaños de los contenedores en la parte inferior de la jerarquía de contención. Estos tamaños luego se filtran hacia arriba en la jerarquía de contención, determinando finalmente el tamaño total del contenedor".

Este comentario no está asociado a un administrador de diseño en particular, pero parece aplicarse al mecanismo de diseño genérico.

Estaría agradecido si un programador experimentado de Java/Swing pudiera explicar por qué este enfoque es mejor que un enfoque de arriba hacia abajo.

En un enfoque de arriba hacia abajo, el contenedor de nivel superior le diría a sus componentes: - hey componentes, ¡tienen píxeles WxH para diseñarlos ustedes mismos! - entonces estos componentes eventualmente les dirían a sus propios componentes que hagan lo mismo. Dependiendo del espacio disponible, cada componente decidiría cómo distribuir sus subcomponentes al descender en la jerarquía. Eventualmente, algunos componentes podrían decidir no pintarse por falta de espacio.

Este enfoque me parece más fácil (para el programador) de entender y mantener.

¿Alguien conoce administradores de diseño alternativos que funcionen de arriba hacia abajo?

Gracias.

preguntado el 30 de agosto de 12 a las 16:08

No creo necesariamente que ninguno de ellos sea mejor que el otro. Pero al final del día tenían que elegir uno. -

Los administradores de diseño pueden trabajar de abajo hacia arriba, para producir un "tamaño preferido", pero la mayoría también trabaja de arriba hacia abajo, para manejar contenedores de tamaño fijo (considere lo que sucede cuando cambia el tamaño del marco manualmente). -

2 Respuestas

Creo que deberías volver a leer esa cita otra vez.

El resultado final es que para determinar el mejor tamaño para el contenedor, el sistema determina los tamaños de los contenedores en la parte inferior de la jerarquía de contención. Estos tamaños luego se filtran hacia arriba en la jerarquía de contención, determinando finalmente el tamaño total del contenedor.

Esto habla de la el albergue mejor calificado tamaño para el recipiente. Por supuesto, esto está determinado por todos los componentes secundarios en su mejor tamaño, por lo que es mejor calcularlo de abajo hacia arriba.

Esto es lo que pasa cuando llamas al pack método en un JFrame.

Sin embargo, es cierto que, al final, los componentes secundarios solo pueden ocupar el espacio que sus padres les permitan. Y ahí es donde el LayoutManager entra en juego: configura el administrador de diseño en el padre, y le dirá a los niños su posición y su tamaño (normalmente considerando cosas como el tamaño preferido que indican los componentes secundarios)

Respondido 30 ago 12, 17:08

La razón por la que los administradores de diseño funcionan así es porque tienen que averiguar el tamaño del contenedor que administran y sus elementos secundarios. La mejor manera de hacer esto es ir lo más profundo posible y comenzar a calcular su tamaño volviendo a subir (de abajo hacia arriba). Esto se hace recursivamente si un contenedor tiene otros contenedores como hijos.

Por ejemplo:

  • tenemos un JPanel j1
  • en j1 hay un JButton
  • j1 está dentro de otro panel j2

Ahora, la mejor manera de averiguar el tamaño de j2 es ir hasta el botón j. Calcula que el tamaño del JButton es, digamos, 50 x 50 píxeles. Eso significa que el tamaño de j1 es 50 x 50 más los elementos secundarios que contenga. Digamos que sale como 200 x 200. En este caso, j2 sabe que su hijo es 200 x 200 y calcula su tamaño teniendo esto en cuenta. Finalmente alcanza un tamaño (para j2) de 500 x 500.

Respondido 30 ago 12, 17:08

ok, pero en la parte superior de la jerarquía tenemos un marco (ventana) cuyo tamaño (en general) lo decide el usuario. En mi humilde opinión, este debería ser el punto de partida del proceso de diseño, no el contenido de los contenedores. - Thibault Langlois

@Davy_Crockett No del todo. Como sabrá, si hace las cosas correctamente, entonces en la ventana que es la parte superior de la jerarquía llama algo como frame.pack. De esta forma, los administradores de diseño de sus hijos calculan su tamaño, lo que determina el tamaño de la ventana. - Radu Murzea

@Davy_Crockett: ¿Qué debería pasar con el texto que no cabe en el contenedor más profundo? - basurero

@trashgod: no se mostraría. Como que no ves todas las celdas de una hoja de cálculo. - Thibault Langlois

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.