Pregunta

¿Qué administrador de diseño de GUI de Java usa todo el mundo?Últimamente he estado usando MigLayout, que tiene algunos controles de componentes potentes.Solo quería ver qué están usando otros desarrolladores además de los JDK estándar.

¿Fue útil?

Solución

MiGLayout es el administrador de diseño de GUI que es ampliamente utilizado por los desarrolladores de Java.

Otros consejos

Diseño de bolsa de cuadrícula es utilizable.Una vez que te acostumbras a usarlo, funciona muy bien.Creo que los administradores de diseño JDK estándar son bastante poderosos por sí solos.Además, puede minimizar la dependencia de bibliotecas de terceros.

MiG y FormLayout (JGoodies) son excelentes para el diseño manual (y casi todos los diseños eventualmente se vuelven manuales).Mi mayor consejo es diseñar sus vistas de modo que pueda eliminar completamente el diseño y volver a implementarlo sin afectar su aplicación (una buena separación entre la vista y el controlador es clave aquí).

Definitivamente eche un vistazo al enfoque PresentationModel de JGoodie para implementar vistas "tontas".Utilizo esta técnica con un generador de GUI (uso GroupLayout con el complemento de creación de GUI de Jigloo) para generar prototipos rápidos.Después de 3 o 4 iteraciones, eso generalmente desaparece y volvemos a implementar usando MiG o FormLayout.

EDITAR:Desde que escribí esto, pasé a usar MiG para todos mis diseños y ya no uso un generador de GUI; es demasiado fácil diseñar cosas usando MiG.

La última aplicación Swing en la que trabajé usaba Diseño de formularios de JGoodies.

Yo uso el Diseño de bolsa de cuadrícula.Parece que requiere mucho código, pero crea diseños muy atractivos.

A mi también me gusta combinar Diseño de borde con paneles GridBagLayout para una gran personalización.

Soy un gran admirador de usar Diseño de tabla en lugar de GridBagLayout.Todo tiene sentido, mientras que cada vez que intento usar GridBagLayout me aplasta el alma.

Solía ​​optar por GridBagLayout para el control, pero desde java1.6 voy a usar Diseño de grupo Vi algunos.

Aquí una captura de pantalla y un código de muestra para usarlo.

texto alternativo http://img145.imageshack.us/img145/7844/screenshot1dz8.png

    private void layoutComponents(){
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);
        SequentialGroup hGroup = layout.createSequentialGroup();

        JLabel nameLbl  = new JLabel("Name");
        JLabel countLbl = new JLabel("Amount");
        JLabel dateLbl  = new JLabel("Date(dd/MM/yy)");
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(nameLbl).
                addComponent(countLbl).
                addComponent(dateLbl).
                addComponent(go));

        hGroup.addGroup(layout.createParallelGroup().
                addComponent(name).
                addComponent(count).
                addComponent(date));

        layout.setHorizontalGroup(hGroup);

        SequentialGroup vGroup = layout.createSequentialGroup();

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(nameLbl).addComponent(name));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(countLbl).addComponent(count));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(dateLbl).addComponent(date));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(go));
        layout.setVerticalGroup(vGroup);

        frame.add( panel , BorderLayout.NORTH );
        frame.add( new JScrollPane( textArea ) );
    }

yo suelo DiseñoCuadrícula para la mayoría de mis paneles.

Para los raros paneles que DesignGridLayout no puedo manejar completamente, uso una combinación de Borderlayout y DesignGridLayout.

Con DesigngridLayout puedes codificar manualmente tus diseños con un número mínimo de líneas de código, que son fáciles de escribir y leer:

DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);

Cada fila de la cuadrícula del panel está definida por una línea de código.Como puede ver, "dibujar" su panel es bastante sencillo.

Además, encuentro DesignGridLayout tiene algunas características únicas (como su "cambio de tamaño vertical inteligente").

GridBagLayout es poderoso pero bastante primitivo:El código que configura el diseño es muy detallado.Esta biblioteca de utilidades (en realidad, solo 1 archivo jar que contiene aproximadamente 10 clases) simplifica mucho el trabajo: http://code.google.com/p/painless-gridbag/ El siguiente fragmento se cita de la página de inicio de ese sitio:

    PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

    gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
             .cell(lblFamilyName).cell(txtFamilyName).fillX();
    gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

    gbl.doneAndPushEverythingToTop();

Como descripción general, es posible que le resulte útil un artículo que escribí hace mucho tiempo al sol.No está actualizado con los últimos administradores de diseño, pero se concentra en el anidamiento efectivo de administradores de diseño, en lugar de intentar hacer todo con un solo diseño.

Ver http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

Descubrí que para cualquier GUI no trivial uso múltiples diseños con subpaneles anidados donde el panel principal puede tener un GridBagLayout y cada subpanel (normalmente sin borde ni indicación de que es un panel) utiliza un diseño más simple siempre que sea posible.Normalmente usaré BorderLayout, FlowLayout, y BoxLayout para subpaneles más pequeños y simples.Al dividir pequeñas secciones de la GUI en subpaneles y utilizar el diseño más simple posible para controlar esa sección de la GUI, puede crear pantallas complejas y bien organizadas sin demasiados dolores de cabeza. GridBagLayoutHay muchas opciones.Además, al agrupar funciones de visualización similares en un panel, se crea un código más legible.

diseño de primavera que fue desarrollado para el constructor mantissa gui que forma parte de netbeans.

he usado Diseño de grupo también.Nuevamente, es un administrador de diseño JDK estándar a partir de Java6, pero también puede encontrar la biblioteca por separado.

Siempre he sido un gran admirador de GridBagLayout.Se parece mucho a las tablas HTML, por lo que es intuitivo para los programadores web.

Comencé usando varios diseños anidados, luego pasé a GridBagLayout (lo cual es bastante frustrante).Desde entonces probé FormLayout (pero descubrí que no era adecuado para nada más que formularios) y me decidí firmemente por TableLayout, con el que en general estoy muy contento.

Desde entonces descubrí MiGLayout y aunque no he hecho mucho más que jugar con él, parece muy capaz, bastante similar a TableLayout y probablemente un poco más limpio.

La gran ventaja para mí es que MiGLayout se convertirá en parte del JDK, por lo que tengo la intención de usarlo prácticamente exclusivamente cuando lo haga.

La otra cosa que debe recordar es que no importa qué LayoutManager pesado elija, siempre hay un lugar para algunos de los administradores de diseño más simples, como GridLayout.He visto algunas cosas horribles hechas con GridBagLayout que podrían haberse hecho mucho más fácilmente con un administrador de diseño más simple.

Prefiero minimizar las dependencias de bibliotecas de terceros, por lo que generalmente es BoxLayout para cuadros de diálogo y GridBagLayout para diseños "complicados".GridBagLayout es bastante fácil de entender, pero un poco difícil de configurar.Yo mismo escribí una herramienta para crear código a partir de diseños HTML (espero que ayude a otros también):http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy

El único administrador de diseño que he encontrado, que en realidad como es el Administrador de diseño relativo.El Administrador de diseño relativo funciona de forma coherente con la forma en que se muestran los cuadros de diálogo. conceptualmente organizado.Un inconveniente es que, si bien este administrador de diseño se ocupa de restricciones aditivas.Lo hace no parecen lidiar con restricciones de proporción.Afortunadamente, está bastante bien diseñado y pude implementar esta función.

yo suelo Diseño de borde El 90% del tiempo mientras anidan. Diseño de caja y Diseño de primavera

Soy un poco novato en Java.

Probé GridBagLayout, me di por vencido, luego probé BoxLayout, luego me di por vencido y luego hice el mío propio. Diseño personalizado que funcionó.Con GridBag y Box hice mi mejor suposición y los motores de diseño decidieron hacer algo diferente, sin ninguna forma aparente de depurarlos.

Con mi diseño personalizado, podía imprimir coordenadas, anchos y alturas para descubrir dónde estaba fallando.Es un poco matemático colocar las cosas, pero tienes todo el poder de Java para usar en lugar del vocabulario limitado de uno de los administradores de diseño integrados.

Por supuesto, era sólo para un proyecto doméstico, nunca se te permitiría hacer esto en el trabajo.

Utilizo GridBagLayout para diseños similares a formularios, uso BorderLayout para diseños simples y FlowLayout para la cantidad de íconos/botones horizontales que tienen algunos espacios en el medio.Netbeans también es un buen creador de GUI que puede evitar muchas codificaciones de diseño tediosas para ahorrarle tiempo.

Empecé a usar Swing recientemente y estoy usando GridBagLayout.

Estaba harto de todos esos administradores de diseño que necesitaban mucha configuración, no eran muy legibles o agotadores de hacer manualmente, así que escribí mi propio administrador de diseño muy simple que utiliza la abstracción de dos fotoesquinas que mantienen cada componente en su lugar.Puede agregar su componente de esta manera: parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");

Echa un vistazo aquí https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java ;) Sin embargo, eres responsable de un diseño correcto, porque no verifica las superposiciones u otros comunicados de tu diseño.

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