vertical setlayout manejo gridlayout definicion borderlayout java swing layout layout-manager null-layout-manager

setlayout - manejo de gridlayout en java



¿Por qué está mal visto utilizar un diseño nulo en Swing? (4)

El truco de hmmm debería ser mezclar los LayoutMangers y el uso de números de JPanels anidados que cada uno podría tener Layout diferente o no, realmente depende del número de JComponents , que le permite crear una GUI que parece como se establece usando AbsoluteLayout pero con el mismo aspecto / salida a la GUI para cada resolución de pantalla y proporción (4: 3, 16: 9, 16:10)

Recientemente, comencé a crear un programa para la empresa para la que trabajo. Solo como información de fondo, todavía soy estudiante y soy un programador principiante, por lo que mi solución probablemente no sea recomendada y no sabía cómo hacerlo de otra manera, pero funciona y no voy a ser juzgado por ello porque es un trabajo de estudiante totalmente ajeno a la programación.

Lo que pasa con el programa es que se ejecutará en una computadora diferente con diferentes tamaños de pantalla y resoluciones (800x600 y más). Para asegurarme de que toma la mayor cantidad posible de la pantalla sin perder ninguna parte del programa, establezco el diseño como nulo y como un código rígido todo usando valores relativos.

El programa es de tipo kiosco y primero obtengo los valores de tamaño de la pantalla e inicio desde allí (por ejemplo, fuera de mi cabeza, el menú del lado izquierdo ocupa el octavo de la pantalla, la barra superior el 2%, etc.) . También uso métricas de fuentes para asegurarme de que los componentes tengan el tamaño correcto y de que todo se muestre bien.

Mi pregunta es: ¿por qué está tan mal visto hacer que el diseño sea nulo en lugar de usar los administradores de diseño? (Me dijeron en algunos foros que esta es una forma horrible de hacer las cosas) Sé cómo funciona el administrador de diseños y cómo usar los diferentes diseños, pero para los requisitos de este programa (múltiples resoluciones diferentes, formas de botones personalizados y ubicaciones) , cambio de texto en los componentes cuando cambias de idioma, etc.), no me veía usando los administradores de diseño para hacerlo todo.

¿Cómo utilizan los programadores más experimentados los administradores de diseño en una situación como esta? ¿Y qué haces cuando quieres que un botón esté en algún lugar específico y otros componentes en algún otro lado que no concuerden con ninguno de los diseños predefinidos?


En pocas palabras: porque todo el trabajo que explicas arriba está hecho (o al menos: debería hacerse) por el administrador de diseño.

En la mayoría de los casos, cuando se usa un diseño nulo, también implica que todas las posiciones y tamaños están codificados en un solo valor, por lo que no se ofrece ninguna flexibilidad. Esto significa que los cambios en el tamaño de la ventana, el idioma, el tamaño de la fuente, la densidad de visualización o cualquier otro parámetro relacionado no tienen ningún efecto en el diseño y obtienes los efectos desagradables habituales: partes vacías de la ventana; listas minúsculas e irresistentes; botones con sus etiquetas cortadas; ...

Parece que el trabajo que haces realmente debería ser realizado por el Administrador de diseño. Busque uno que haga eso (mi sugerencia personal sería MiGLayout , que hace mucho y es fácil de usar) o escriba la suya propia.


Prácticamente estás usando un diseño, el tuyo, con todos tus sofisticados cálculos de posiciones.

Puede mover esta lógica a una clase de gestor de diseño personalizado para pacificar las críticas.


Si aplica capas a los administradores de diseño correctamente, la pantalla volverá a fluir a diferentes tamaños para usted, la idea es usar un único conjunto de administradores de diseño en TODOS los tamaños de pantalla.

Si usa null, tendrá que hacer cada tamaño de pantalla usted mismo. No solo eso, pero si la aplicación se puede abrir con ventanas, debe admitir todos los tamaños posibles a los que puedan desplazarse.

Es algo difícil de hacer, pero los gerentes de diseño están diseñados para hacer justamente eso.

Hay algunos trucos comunes. BorderLayout es un gran diseño para comenzar. A veces puede usarlo en varios niveles, a menudo con solo 2 o 3 componentes. Esto se debe a que es muy bueno para darle a todas menos a una área el área mínima requerida y dar todo lo demás al CENTRO.

FlowLayout puede ser útil, pero es complicado si sus componentes son de diferentes tamaños.

No probaría GridBagLayout a menos que planees escribir código para alimentar tu administrador de diseño (¡una excelente solución!).

Tampoco usaría constructores de GUI, ellos no conocen la forma general en que desea redistribuir su diseño.