grafica - layout ejemplos java
¿Son adecuados los gestores de diseño de Swing? (9)
Solo tuve que agregar una casilla de verificación a una aplicación que se escribió antes de llegar aquí, y fue mucho más difícil de lo que tenía que ser porque la aplicación usa un LayoutManager de terceros que intenta hacer un posicionamiento pseudo-absoluto en cuadrícula. La API fue terrible, requiere cadenas de designación de posición que son listas delimitadas por comas de dos, cuatro o seis parámetros (todavía no sé por qué varía esto), y prefiero dejar que LayoutManager maneje una gran cantidad de esto. trabajo pesado, de todos modos. Siempre he sentido que permitir que Swing coloque las cosas por sí mismo llevó a una mejor organización que todo lo que pude generar. Me sentí de la misma manera con las aplicaciones CGI, donde además de agrupar ocasionalmente casillas de verificación o cajas de radio con tablas, simplemente dejo que el navegador fluya y ajuste las cosas como quiera el usuario.
¿Las implementaciones de LayoutManager incluidas con Swing son adecuadas, o es realmente necesario incorporar este tipo de control absoluto para forzar el diseño para que sea exactamente lo que desea (y darle un millón de decisiones más para hacer)?
En mi experiencia, son adecuados para que estés preparado para anidar un poco (en algunos casos, anidar mucho).
De cualquier forma, siempre he encontrado que los administradores de maquetación son más problemáticos de lo que vales.
Esta situación se está poniendo mucho mejor. Diría que los tres administradores de diseño no estándar más comunes son:
- JGoodies FormLayout
- TableLayout
- MigLayout
Los dos últimos son bastante similares, pero MigLayout apareció un poco más tarde y formará parte del JDK en el futuro. Yo diría que cualquiera de los tres tiene un nivel "estándar" suficiente para usar bastante cómodamente, pero es probable que MigLayout gane ahora y ahora sea parte de Swing.
Entonces, en este momento, diría que no. Una vez que MigLayout está en el JDK, sí.
Nunca he sido un gran admirador de los administradores de diseño de Swing, pero vine a Swing por haber hecho un montón de Motif. No estoy seguro de qué es, pero no me parece que Swing tenga la capacidad de algo anidado bajo para "empujar" y forzar las cosas más altas que lo suficientemente grandes como para encajarlas. Además, Yo era un gran admirador de XmForm y no hay nada igual en Swing.
Dicho esto, el 90% del tiempo en Swing utilizo un montón de cajas anidadas, generalmente cajas verticales dentro de cajas horizontales dentro de cajas verticales. A veces necesito más control y terminé el manual de GridBagLayout y shudder.
Los administradores de diseño de Swing son generalmente suficientes para hacer lo que sea que intentes hacer. En el "peor" tendrá que usar GridBagLayout completo y posicionar cada componente por su cuenta usando las coordenadas. A partir de su pregunta, parece que su compañía ha escrito una cubierta al permitirle agregar componentes usando algún extraño esquema de entrada. En general, recomendaría no crear un nuevo administrador de diseño a menos que realmente pueda explicar cómo ninguno de los administradores integrados hace lo que necesita hacer, ni pueden unirse fácilmente para hacer lo que necesita.
Según su descripción, puede estar utilizando TableLayout. Si es así, he encontrado que esto es superior a los administradores de diseño estándar de muchas maneras. Si es TableLayout, intente leer la documentación y comprenderá por qué a veces hay diferentes números de parámetros de posicionamiento. TableLayout también le permite establecer estos parámetros de una manera diferente, sin las cadenas.
Además de los 3 administradores de diseño de terceros antes mencionados, es posible que desee probar DesignGridLayout, que aunque no es tan poderoso como MigLayout, es mucho más fácil de usar y dificulta el diseño de formularios incorrectos.
Descargo de responsabilidad: soy uno de los autores de DesignGridLayout, pero realmente creo que este es un buen LayoutManager comparado con los predeterminados de Swing, y también otros diseños de terceros que son demasiado complicados para empezar.
Personalmente, creo que el concepto de administración de diseño de Java es lo más genial desde el pan rebanado; esencial para ventanas redimensionables: simplemente observe todas las ventanas en Windows que no son redimensionables como una indicación de que tener un administrador de diseño abstracto es una buena idea.
Dicho esto, los administradores de disposición en Java son adecuados , pero requieren una buena cantidad de anidación para llegar a donde debe estar. Esa anidación hace que los cambios sean engorrosos. Mire en BoxLayout y BorderLayout como sus productos básicos; usa GridBagLayout solo como último recurso.
La mejor opción es incorporar un diseño orientado a la mesa decente para minimizar el anidamiento; otros ya han sugerido varios, así que no lo voy a reiterar. Puse el mío porque quería restricciones basadas en String y una pequeña huella, pero de lo contrario, estuve bastante tentado por TableLayout; y si el tamaño de la distribución no es un objeto, absolutamente debe echar un vistazo a los widgets y diseños ofrecidos por jGoodies (creo que es gratuito, pero tal vez solo para uso no comercial).
Por lo general, uso un diseño de tabla para la ventana y acabo anidado solo algunas veces y usualmente solo un nivel de profundidad para ejecuciones de componentes relacionados, por ejemplo, tres cuadros para un número de teléfono separados por dos etiquetas para los guiones intermedios. Creo que mis ventanas son muy fáciles de mantener y es fácil agregarlas y cambiarlas.
PD: evita cualquier posicionamiento absoluto como la plaga
Siempre he pensado que GridBagLayout es un LayoutManager realmente poderoso. Desafortunadamente, la curva de aprendizaje para dominarlo puede ser un poco abrupta. Mi primer trabajo no nos permitió utilizar constructores de GUI, por lo que todo el código de la GUI se escribió a mano. Siempre he pensado que esta es la mejor manera de aprender GridBagLayout, ensuciarse las manos. Hoy en día, siendo viejo y perezoso, utilizo NetBeans principalmente, pero todavía no he sentido la necesidad de considerar otros LayoutManagers, ya que GridBagLayout puede hacer de todo.
Para mí, también una cuadrícula es una forma realmente buena de diseñar cosas. Simplemente tiene sentido organizar su diseño de esa manera y pensarlo en términos de filas y columnas.
No he hecho ningún trabajo de Swing durante un par de años, pero los administradores de diseño son una de las cosas que más extraño cuando intento escribir páginas web. Trabajamos mucho con GridBagLayout, especialmente para los diálogos más complicados, y una vez masterizados, era relativamente fácil de usar: al escribir las pantallas. El dolor siempre llegaba cuando tener que modificar la GUI y lo que en apariencia parecía simple, tomaría una estúpida cantidad de tiempo para hacerlo.
Me presentaron a Abeille , una herramienta de diseño de formularios GUI, y si bien no es perfecta, le permite crear pantallas en cuestión de minutos con resultados de aspecto profesional, especialmente cuando se combina con JGoodies. Incluye un generador de código o saldría a formato binario (creo que incluía XML más adelante), que era mi opción preferida. El código para "construir" la pantalla se veía así:
FormPanel panel = new FormPanel( "myDialog.jfrm" );
add(panel);
Puede enganchar en los controles en el formulario para los oyentes de acción y cuando emplea un patrón MVC conduce a un código de vista realmente limpio. El mayor beneficio se obtiene cuando se realizan cambios, ya que el formulario solo se puede cargar en el editor, los cambios se hacen rápidamente y se guardan sin alterar el código.
(No estoy de ninguna manera asociado con Abeille, solo un gran fan)