son - swing fillers java
¿Qué diseño(s) de Swing recomiendan? (14)
Hay 8 administradores de diseño en la biblioteca Java solo, y luego hay un montón de productos de terceros también.
El otro día, traté de usar SpringLayout y ... bueno, no funciona para mí. Ver mi otra pregunta . Entonces ... si tiene una aplicación Swing para diseñar, y quiere que su diseño sea el mismo , ¿cuáles son sus administradores de diseño preferidos? ¿Alguna experiencia interesante / útil para relacionar?
Actualización: Sí, estoy seguro de que diferentes LM son apropiados para diferentes diseños. Pero espero que la mayoría de ustedes use 1, 2 o tal vez 3 para todo lo que hacen, o juran por uno que es tan versátil que nunca necesitan nada más. Con suficientes respuestas, esperaría ver algo así como una curva de campana, con un pico en GridBagLayout o MigLayout (por ejemplo) y una cola larga de algunos rezagados usando (digamos) BoxLayout o FlowLayout.
Afortunadamente, la distribución de las respuestas revelará algunas tendencias sobre qué personas usan más para Get Stuff Done ™
ACTUALIZACIÓN y resumen
OK, después de casi 2 días, ¡MiGLayout está definitivamente al frente! Sus fanáticos estarán felices de escuchar que parece que este diseño ingresará pronto a la biblioteca "oficial".
GroupLayout, FormsLayout y TableLayout son relativamente nuevos y no han recibido mucha exposición. Quizás otros estarán tan sorprendidos de descubrir sobre ellos como yo.
Depende del tipo de GUI que esté creando. Puede usar solo uno o dos de los diseños simples, o puede necesitar alcanzar un diseño más avanzado. El uso general de mi administrador de diseño probablemente se dividiría en algo como esto, aunque variaría según el proyecto:
- 65% GridBagLayout: el único diseño que lo hará, sin importar lo que necesite hacer.
- 15% Box / BoxLayout: ideal para pegar de forma rápida y sencilla un par de componentes.
- 12% BorderLayout - Bueno para adjuntar un panel de botones o panel de información a un panel de contenido. Casi siempre lo uso para agregar contenido a un JFrame.
- 3% FlowLayout: útil para paneles de botones, pero no mucho más.
- 3% CardLayout: principalmente útil en programas que muestran diferentes paneles de contenido para diferentes modos operativos.
- 2% Otros diseños: es muy raro que necesite algo más, pero a veces uno de los otros diseños es útil.
Una vez que te acostumbras a GridBagLayout, no es tan malo escribir inicialmente, pero todavía no es bonito trabajar con él, o depurarlo más tarde. Intenté con MiGLayout por algo recientemente y me decepcionó descubrir que el MiGLayout en realidad terminó siendo más complicado de usar que el GridBagLayout en ese caso particular.
Algunas personas intentan evitar GridBagLayout como la peste; pero la verdad es que hay algunas cosas que ninguna combinación de diseños simples podrá manejar. Está bien dividir una GUI en paneles para diferentes secciones lógicas, pero creo que si estás creando un montón de paneles innecesarios anidados solo para el posicionamiento de componentes, claramente necesitas aprender a usar un GridBagLayout (u otro diseño similarmente avanzado, como MiGLayout). Puede hacer que su GUI se vea bien con un desagradable lío de BorderLayouts y GridLayouts y BoxLayouts anidados, pero tan pronto como alguien comience a cambiar el tamaño de las ventanas y los diálogos de la aplicación para que sean más pequeños o más grandes que los diseñó originalmente, su GUI probablemente se verá horrible y sus clientes comenzarán a formarse una opinión negativa acerca de su producto, ya que no podría hacerlo de forma sencilla.
Actualización: He estado usando WindowBuilder en Eclipse desde hace un tiempo, y simplifica enormemente el trabajo con muchos diseños, especialmente GridBagLayout. Solía pasar mucho tiempo escribiendo diseños a mano, pero con WindowBuilder o, probablemente, cualquier editor visual avanzado similar, puede crear los diseños en mucho menos tiempo.
Depende del tipo de diseño que necesites, por eso tienes 8 de ellos:
-
BorderLayout
, simple y bastante útil para diseñar marcos de contenido normal (con contenido principal en el medio y ayudantes en los lados). -
GridLayout
, útil cuando tienes una grilla de objetos que deberían ser del mismo tamaño (¿botones? ¿Campos de texto?). -
GridBagLayout
, muy flexible, necesita algunos ajustes para estar bien y es bastante detallado (pero lo recomiendo si quieres hacer las cosas bien ). -
FlowLayout
, inútil. No es un diseño muy simple: simplemente colocando el elemento uno al lado del otro. -
CardLayout
, útil para pestañas o subvistas que deben cambiarse. -
BoxLayout
, nunca loBoxLayout
demasiado ... debería ser un tipo deFlowLayout
mejorado, pero no es lo suficientemente flexible como para ser utilizado de manera intensiva.
Existen las siguientes opciones de diseño disponibles:
MiGLayout
TableLayout
GroupLayout
FormsLayout
De estos, MigLayout es el más recomendado ya que es el administrador de disposición de swing. Hay otros que no tienen mucha exposición.
No hay una respuesta real a su pregunta, excepto que: depende. Depende del tipo de marco (forma) que intente crear. No soy Swing-guru, pero creé un par de GUI (moderadamente avanzadas) y nunca tuve la necesidad de tocar el administrador de GridBagLayout. Siempre he sido capaz de crear mi GUI usando una combinación de administradores de diseño "más fáciles". Por ejemplo, puede dar a su marco BorderLayout y luego colocar otro diseño en el SUR de ese BorderLayout.
Solo uso GridBagLayout
, especialmente cuando hago algunas interfaces complejas, créanme que GridBagLayout
puede hacer cualquier cosa. También recomendé el FlowLayout
, porque es fácil de usar y comprensible, es bueno para poner un grupo de botones. En realidad, solo uso estos dos diseños ya que es parte de la biblioteca JDK, ya que para el MigLayout
no lo he probado todavía, por lo que por ahora no puedo recomendarlo.
Soy neófito de Swing, pero mientras escribía mi primera aplicación Swing, probé cuatro administradores de diseño diferentes: FlowLayout, BoxLayout, GridLayout y GroupLayout. En mi opinión, FlowLayout y BoxLayout parecen ser los más apropiados para diseñar grupos de componentes de tamaños similares. Para componentes de distintos tamaños, GroupLayout parece ser el camino a seguir. Curva de aprendizaje más pronunciada que las otras dos, pero definitivamente vale la pena. En cuanto a GridLayout, yo diría que puede lograr los mismos resultados que con ese administrador de diseño mediante el uso de una combinación de FlowLayout y BoxLayout, y probablemente tendrá más control de la ubicación de sus componentes. Pero tal vez solo soy yo :)
Sheldon
Use IntelliJ IDEA con su diseñador de GUI. Hace que GridBagLayout sea fácil.
Usualmente uso el diseño de borde con gridlayout , primero diseño ui en prototipo de papel;
texto alternativo http://www.usernomics.com/images/paper-mockup.jpg
Después de eso, podemos dividir la pantalla en gridlayout en borderlayout. En esta imagen vemos NORTH, CENTER, SOUTH (elementos BorderLayout) y el diseño de cada parte puede ser gridlayout o BorderLayout, depende de usted. Los mismos diseños pueden usar uno dentro del otro.
DesignGridLayout
ve muy bien y es fácil de usar a través de una interfaz fluida .
solo mira el ejemplo:
con solo unas pocas líneas de código limpio:
layout.row().grid(label("Last Name")) .add(lastNameField) .grid(label("First Name")) .add(firstNameField);
layout.row().grid(label("Phone")) .add(phoneField) .grid(label("Email")) .add(emailField);
layout.row().grid(label("Address 1")) .add(address1Field);
layout.row().grid(label("Address 2")) .add(address2Field);
layout.row().grid(label("City"), 1) .add(cityField);
layout.row().grid(label("State")) .add(stateField) .grid(label("Postal Code")) .add(postalField);
layout.row().grid(label("Country"), 1) .add(countryField);
layout.emptyRow();
layout.row().center().add(newButton).add(deleteButton).add(editButton).add(saveButton).add(cancelButton);
GroupLayout es bastante decente. Originalmente fue diseñado para ser utilizado por las aplicaciones de GUI Builder, pero también me ha resultado muy sencillo codificar a mano.
MiGLayout , sin dudas. Honestamente, es el único administrador de diseño Swing que conozco que tiene sentido.
El mero hecho de que haya 8 administradores de diseño en el núcleo de JDK es una buena señal de que los creadores de Swing no tenían absolutamente ninguna idea sobre lo que estaban tratando de hacer. Esto no es para destruir el resto del Swing, es un buen conjunto de herramientas GUI, excepto para los administradores de diseño.
FormLayout
, parte del paquete JGoodies Forms ha sido un caballo de batalla para mí. No es perfectamente flexible ya que trabaja duro para que su diseño se vea bien. Lo he usado durante varios años en docenas de proyectos y sigue produciendo resultados atractivos rápidamente.
Usted especifica su diseño en texto legible por humanos, luego agrega los componentes. Hecho.
GridBagLayout
. Hace prácticamente todo lo que necesita (más o menos) y está en la biblioteca de Java. Es cierto que necesita ayuda, y la API es terrible.
GroupLayout
un verdadero desorden en el código de diseño. De acuerdo, entonces el código GUI de la mayoría de la gente es una gran bola de barro. ¡Pero tu no tiene que ser así! Quizás se podría poner una buena interfaz en este administrador de diseño, pero sospecho que podría tener que ser clonado y ser propiedad.
No estoy a favor de introducir dependencias externas a menos que sean realmente necesarias. Además, muchos de los administradores de diseño de terceros utilizan cadenas de datos, que tienen todos los problemas habituales.
Todos ellos, en combinación. Ese es todo el punto. Cada administrador de diseño cumple diferentes requisitos, y al anidar paneles con diferentes administradores de diseño, puede lograr casi cualquier cosa.
Los administradores de diseño de "hacer todo en un solo panel" como GridBagLayout
y GroupLayout
(y muchos terceros) tienen su lugar, principalmente cuando se necesitan alinear componentes en diferentes partes del diseño, pero con un diseño grande, generalmente resultan en un lío enorme y difícil de manejar.