framework alternatives alternative java swing user-interface swt awt

alternatives - Marcos de la GUI de Java. ¿Qué elegir? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?



primefaces alternative (9)

Hay bastantes gui frameworks para java, pero ¿qué se reconoce como el framework de elección de hoy?

Lo siguiente es mi comprensión de los diferentes marcos, corríjame si me equivoco. Este es un conjunto de preguntas muy poco definido, pero aún creo que es valioso para cualquiera que esté pensando en crear aplicaciones gui ricas.

AWT

Es la base del swing, funciona bien pero carece de componentes avanzados. Si pretende crear aplicaciones enriquecidas, AWT probablemente no sea el camino a seguir. Sin embargo, para aplicaciones gui más pequeñas que no requieren interfaces de usuario enriquecidas. Esto podría adaptarse perfectamente ya que es un marco probado y comprobado.

Swing

Basado en AWT como se indicó anteriormente. En su infancia, fue considerado como lento y defectuoso y causó que IBM creara SWT para Eclipse. Sin embargo, con Java 5 (¿o 6?) Swing se convirtió en el marco de elección para crear nuevas aplicaciones. El swing tiene muchos componentes ricos, pero todavía faltan en algunas áreas. Un ejemplo es que no hay un componente TreeTable con todas las funciones que pueda ordenar y filtrar / buscar.

SWT

Creados por IBM para Eclipse, parecían pensar que Swing no era adecuado para Eclipse en ese momento. Por sí mismo es bastante bajo y utiliza los widgets nativos de la plataforma a través de JNI. No está relacionado con Swing y AWT en absoluto. Sin embargo, su API es un tanto torpe y no intuitiva. Tienen algunos componentes avanzados como una tabla de árbol. (pero no creo que admitan clasificación y filtrado fuera de la caja). SWT utiliza algunos enlaces nativos (¿a través de JNI?) Y la perorata en Internet es que este marco no debe usarse en los proyectos de hoy. (¿Por qué no?)

SwingX

Basado en Swing y su misión es crear componentes ricos para swing. Todavía en desarrollo. (aunque no muy activo). Tiene un conjunto de componentes muy bueno, como por ejemplo TreeTable. Pero la TreeTable no admite el filtrado y la clasificación por lo que sé. Sin embargo, sí admite búsquedas con resaltado.

Tenga en cuenta que SwingX son componentes (AFAIU) que son extensiones o composiciones de componentes Swing existentes

JGoodies

Un marco del que no sé nada ... ¿Qué son sus fortalezas y debilidades? ¿Qué set Jgoodies aparte del resto?

JGoodies OTOH es sobre PLAFs y diseños.

JavaFX

El último buque insignia de Java / Oracle. Prometiendo ser el estándar de facto en el desarrollo de aplicaciones web o de escritorio enriquecidas.

Pivote de Apache

Representa la IU utilizando Java2D, minimizando así el impacto de los legados (IMO, hinchados) de Swing y AWT. (@Austustus Thoo)

Su enfoque principal parece estar en RIA (aplicaciones de Internet enriquecidas), pero parece que también puede aplicarse a aplicaciones de escritorio. Y como comentario personal, se ve muy interesante! Especialmente me gusta que sea un proyecto apache.

https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html

Qt Jambi

Un contenedor java para la biblioteca qt nativa que está escrita en c / c ++. Muy potente, ampliamente utilizado y aceptado. Tiene muchos componentes GUI y una API fácil de usar.

http://qt-jambi.org/

Entonces, para tratar de resumir un poco de lo que pregunto:

Digamos que quería crear una aplicación de escritorio hoy en Java que involucra muchos componentes avanzados, ¿qué debo elegir? ¿Y por qué?

¿Cuál de estos marcos debería ser reconocido como obsoleto y cuál debería ser reconocido como el marco de un futuro lejano?

¿Qué es el marco estándar de facto de hoy y qué herramientas utiliza para crear aplicaciones Java Gui?

Puede que me arrepienta de haber preguntado esto, pero lo intentaré de todos modos:

Se dice que C # /. Net tiene un buen conjunto de componentes fáciles de usar que se pueden flexionar en todas las direcciones posibles. Y después de investigar diferentes marcos de Java en cierta medida, parece que no puedo decir lo mismo de Java. ¿Por qué es esto? ¿Por qué java (que es el lenguaje de programación más utilizado en el mundo) no tiene el mismo conjunto de componentes GUI?

¿Es solo que java ha basado sus componentes gui en un nivel mucho más bajo, y es posible escribir todos estos componentes avanzados que estoy buscando, pero tiene que hacer mucho si no todo el trabajo?


Árbol de decisión:

  1. Marcos como Qt y SWT necesitan DLL nativas. Así que debes preguntarte: ¿Son compatibles todas las plataformas necesarias? ¿Puede empaquetar los DLL nativos con su aplicación?

    Vea aquí, cómo hacer esto para SWT .

    Si tiene una opción aquí, debería preferir Qt sobre SWT. Qt ha sido desarrollado por personas que entienden la IU y el escritorio, mientras que SWT se ha desarrollado por necesidad para hacer que Eclipse sea más rápido. Es más un parche de rendimiento para Java 1.4 que un marco de IU. Sin JFace, le faltan muchos componentes importantes de la interfaz de usuario o características muy importantes de los componentes de la interfaz de usuario (como filtrar tablas).

    Si a SWT le falta una característica que necesita, el marco es algo hostil para extenderlo. Por ejemplo, no puede extender ninguna clase en él (las clases no son definitivas, solo lanzan excepciones cuando el paquete de this.getClass() no es org.eclipse.swt y no puede agregar nuevas clases en ese paquete porque está firmado).

  2. Si necesitas una solución Java nativa y pura, eso te deja con el resto. Comencemos con AWT, Swing, SwingX - la forma Swing.

    AWT está desactualizado. Swing está desactualizado (quizás menos, pero no se ha trabajado mucho en Swing durante los últimos 10 años). Se podría argumentar que Swing fue bueno para empezar, pero todos sabemos que el código se pudre. Y eso es especialmente cierto para las interfaces de usuario de hoy.

    Eso te deja con SwingX. Después de un período más largo de lento progreso, el desarrollo ha repuntado nuevamente . El principal inconveniente de Swing es que se aferra a algunas ideas antiguas que, desde hace 15 años, son muy desastrosas, pero que hoy en día se sienten "torpes". Por ejemplo, las vistas de tabla admiten el filtrado y la clasificación, pero aún tiene que configurar esto. Tendrá que escribir un montón de código de placa de caldera para obtener una interfaz de usuario decente que se sienta moderna.

    Otra área débil es la temática. A partir de hoy, hay muchos temas alrededor. Vea aquí para un top 10 . Pero algunos son lentos, otros tienen errores, otros están incompletos. Odio cuando escribo una IU y los usuarios se quejan de que algo no funciona para ellos porque seleccionaron un tema extraño.

  3. JGoodies es otra capa encima de Swing, como SwingX. Intenta hacer el Swing más agradable de usar. El sitio web se ve muy bien. Echemos un vistazo al tutorial ... hm ... todavía buscando ... espera. Parece que no hay documentación en el sitio web en absoluto. Google al rescate . No, no hay tutoriales útiles en absoluto.

    No me siento confiado con un marco de UI que intenta ocultar la documentación de los posibles nuevos fans. Eso no significa que JGoodies sea malo; Simplemente no pude encontrar nada bueno que decir al respecto, pero se ve bien.

  4. JavaFX. Genial, con estilo. El soporte está ahí, pero siento que es más un juguete brillante que un marco de interfaz de usuario serio. Este sentimiento radica en la falta de componentes complejos de la interfaz de usuario, como las tablas de árboles. Hay un componente basado en webkit para mostrar HTML .

    Cuando se presentó, mi primer pensamiento fue "cinco años demasiado tarde". Si su objetivo es una buena aplicación para teléfonos o sitios web, bien. Si su objetivo es una aplicación de escritorio profesional, asegúrese de que ofrece lo que necesita.

  5. Pivote. La primera vez que me enteré. Es básicamente un nuevo marco de interfaz de usuario basado en Java2D. Así que lo intenté ayer. No Swing, solo un poquito de AWT ( new Font(...) ).

    Mi primera impresión fue buena. Hay una extensa documentación que te ayuda a comenzar. La mayoría de los ejemplos vienen con demostraciones en vivo (Nota: debe tener Java habilitado en su navegador web; esto es un riesgo para la seguridad ) en la página web, de modo que pueda ver el código y la aplicación resultante uno al lado del otro.

    En mi experiencia, se requiere más esfuerzo en el código que en la documentación. Al mirar los documentos de Pivot, se debe haber realizado un gran esfuerzo en el código. Tenga en cuenta que actualmente hay un error que impide que algunos de los ejemplos funcionen ( PIVOT-858 ) en su navegador.

    Mi segunda impresión de Pivot es que es fácil de usar. Cuando me encontré con un problema, generalmente podía resolverlo rápidamente mirando un ejemplo. Sin embargo, me falta una referencia de todos los estilos que admite cada componente.

    Al igual que con JavaFX, faltan algunos componentes de nivel superior como un componente de tabla de árbol ( PIVOT-306 ). No probé la carga perezosa con la vista de tabla. Mi impresión es que si el modelo subyacente usa carga perezosa, entonces eso es suficiente.

    Prometedor. Si puedes, dale una oportunidad.


Estoy muy contento con Swing para las aplicaciones de escritorio en las que he participado. Sin embargo, comparto su opinión sobre Swing que no ofrece componentes avanzados. Lo que he hecho en estos casos es ir por JIDE. No es gratis, pero tampoco es tan caro y le brinda muchas más herramientas en su haber. Específicamente, ofrecen una tabla de árbol filtrable.


Me gustaría sugerir otro marco: Apache Pivot http://pivot.apache.org/ .

Lo probé brevemente y me impresionó lo que puede ofrecer como un marco RIA (Rich Internet Application) para Flash.

Representa la IU utilizando Java2D, minimizando así el impacto de los legados (IMO, hinchados) de Swing y AWT.


Mi opinión personal: opta por Swing junto con la plataforma NetBeans.

Si necesita componentes avanzados (más de lo que ofrece NetBeans), puede integrar fácilmente SwingX sin problemas (o JGoodies), ya que la plataforma NetBeans está completamente basada en Swing.

No iniciaría una aplicación de escritorio grande (o una que será grande) sin una buena plataforma que se construya sobre el marco de la interfaz de usuario subyacente.

La otra opción es SWT junto con el Eclipse RCP, pero es más difícil (aunque no imposible) integrar componentes Swing "puros" en dicha aplicación.

La curva de aprendizaje es un poco empinada para la plataforma NetBeans (aunque creo que eso también es cierto para Eclipse), pero hay algunos buenos libros que recomiendo ampliamente.


Otra opción es utilizar http://qt-jambi.org/ . Tiene casi toda la grandeza de Qt (muchos componentes, buena documentación, fácil de usar), sin la molestia de C ++. Lo usé hace 3-4 años para un pequeño proyecto, incluso entonces estaba casi maduro.

Es posible que desee ver la discusión sobre Swing vs. Qt here .


Swing + SwingX + Miglayout es mi combinación preferida. Miglayout es mucho más simple que Swings percibió 200 gestores de diseño diferentes y mucho más potente. Además, le proporciona la capacidad de "depurar" sus diseños, lo que es especialmente útil cuando se crean diseños complejos.


Yo iría con Swing. Para el diseño yo usaría el diseño de formularios de JGoodies. Vale la pena estudiar el documento técnico de Form Layout aquí: http://www.jgoodies.com/freeware/forms/

Además, si va a comenzar a desarrollar una gran aplicación de escritorio, definitivamente necesitará un marco. Otros han señalado el marco de netbeans. No me gustó mucho, así que escribí una nueva que ahora utilizamos en mi empresa. Lo puse en sourceforge, pero no encontré el tiempo para documentarlo. Aquí está el enlace para navegar por el código:

http://swingobj.svn.sourceforge.net/viewvc/swingobj/

El escaparate debería mostrarle cómo hacer un inicio de sesión simple en realidad ...

Déjame saber si tienes alguna pregunta que pueda ayudarte.


se olvidó de la aplicación Java Desktop basada en JSR296 como Swing Framework incorporado en NetBeans

si se excluyen AWT y JavaFX, todos los marcos descritos se basan en Swing; si comienza con Swing, entonces será comprensible (claramente) para todos estos Swing (Framework Basados)

ATW, SWT (Eclipse), Aplicación de escritorio Java (Netbeans), SwingX, JGoodies

todos los frameworks (no sé algo más sobre JGoodies) incl. JavaFX no ha avanzado mucho en el tiempo, muchos de los marcos basados ​​en Swing se han detenido, si no entonces sin la versión más reciente

Mi punto de vista, el mejor de ellos es SwingX, pero requiere un conocimiento más profundo sobre Swing,

Look and Feel para los marcos basados ​​en Swing


SWT en sí mismo es bastante bajo y utiliza los widgets nativos de la plataforma a través de JNI. No está relacionado con Swing y AWT en absoluto. El IDE de Eclipse y todas las aplicaciones de cliente enriquecido basadas en Eclipse, como el cliente Vuze BitTorrent , se crean utilizando SWT. Además, si está desarrollando complementos de Eclipse, normalmente utilizará SWT.
He estado desarrollando aplicaciones y complementos basados ​​en Eclipse durante casi 5 años, así que estoy claramente sesgado. Sin embargo, también tengo una amplia experiencia en el trabajo con SWT y el kit de herramientas de JFace UI , que se basa en él. He encontrado que JFace es muy rico y poderoso; en algunos casos, incluso podría ser la razón principal para elegir SWT. Le permite crear una interfaz de usuario funcional bastante rápido, siempre que sea similar a IDE (con tablas, árboles, controles nativos, etc.). Por supuesto, también puede integrar sus controles personalizados, pero eso requiere un esfuerzo adicional.