Hay bastantes marcos de interfaz gráfica de usuario para Java, pero ¿cuál se reconoce como el marco de elección actual?
Lo siguiente es mi comprensión de los diferentes marcos, corríjame si estoy equivocado. Este es un conjunto de preguntas muy poco definido, pero sigo pensando que es valioso para cualquiera que esté pensando en crear aplicaciones ricas de GUI.
Es la base del swing, funciona bien pero carece de componentes avanzados. Si tiene la intención de crear aplicaciones ricas, 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 encajar perfectamente, ya que es un marco probado y probado.
Basado en AWT como se indicó anteriormente. En su infancia, se consideraba lento y con errores, e hizo 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. Swing tiene muchos componentes ricos, pero aún faltan en algunas áreas. Un ejemplo es que no hay un componente TreeTable con todas las funciones que pueda ordenar y filtrar / buscar.
Creado por IBM para Eclipse, parecían pensar que Swing no era adecuado para Eclipse en ese momento. Por sí solo es de bajo nivel, 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 algo torpe y no intuitiva. Tienen algunos componentes avanzados como una TreeTable. (pero no creo que admitan la clasificación y el filtrado fuera de la caja). SWT utiliza algunos enlaces nativos (¿a través de JNI?) Y la queja en Internet es que este marco no debe usarse en los proyectos de hoy. (¿Por qué no?)
Basado en Swing y su misión es crear componentes ricos para swing. Aún en desarrollo. (aunque no muy activo). Tenga un conjunto de componentes muy agradable, como por ejemplo TreeTable. Pero la TreeTable no admite el filtrado y la clasificación hasta donde yo sé. Sin embargo, admite la búsqueda 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 ... ¿Cuáles son sus fortalezas y debilidades? ¿Qué distingue a Jgoodies del resto?
JGoodies OTOH se trata de PLAF y diseños.
El último buque insignia de Java / Oracle. promete ser el estándar de facto en el desarrollo de aplicaciones web o de escritorio enriquecidas.
Representa la interfaz de usuario utilizando Java2D, minimizando así el impacto de los legados (IMO, hinchado) de Swing y AWT. (@Augustus Thoo)
Su enfoque principal parece estar en RIA (aplicaciones de Internet enriquecidas), pero parece que también se puede aplicar a aplicaciones de escritorio. Y como comentario personal, ¡parece muy interesante! Me gusta especialmente que sea un proyecto apache.
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
Un contenedor de 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.
Entonces, para tratar de resumir un poco de lo que estoy preguntando:
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 reconocerse como obsoleto y cuáles deberían reconocerse como marcos del futuro lejano?
¿Cuál es el marco de facto-estándar de hoy y qué herramientas utiliza para crear aplicaciones Java GUI?
Podría lamentar preguntar esto, pero lo intentaré de todos modos:
Se dice que C # /. Net tiene un muy 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 hasta cierto punto, parece que no puedo decir lo mismo sobre 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 de interfaz gráfica de usuario en un nivel mucho más bajo, y es posible escribir todos estos componentes avanzados que estoy buscando, pero usted tiene que hacer mucho, si no todo, el trabajo usted mismo?
Respuestas:
Árbol de decisión:
Los marcos como Qt y SWT necesitan archivos DLL nativos. Entonces debe preguntarse: ¿son compatibles todas las plataformas necesarias? ¿Puedes empaquetar las DLL nativas con tu 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 interfaz de usuario 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 interfaz de usuario. Sin JFace, le faltan muchos componentes principales de la interfaz de usuario o características muy importantes de los componentes de la interfaz de usuario (como el filtrado en las tablas).
Si a SWT le falta una característica que necesita, el marco es algo hostil para extenderla. Por ejemplo, no puede extender ninguna clase en él (las clases no son finales, solo lanzan excepciones cuando el paquete de
this.getClass()
no esorg.eclipse.swt
y no puede agregar nuevas clases en ese paquete porque está firmado).Si necesita una solución nativa y pura de Java, eso le 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 IU de hoy.
Eso te deja con SwingX. Después de un período más largo de progreso lento, el desarrollo se ha recuperado nuevamente . El mayor inconveniente de Swing es que se aferra a algunas ideas antiguas que eran muy sangrientas hace 15 años pero que hoy se sienten "torpes". Por ejemplo, las vistas de tabla admiten el filtrado y la ordenación, pero aún debe configurar esto. Tendrá que escribir una gran cantidad de código de placa de caldera solo para obtener una interfaz de usuario decente que se sienta moderna.
Otra área débil es el tema. A partir de hoy, hay muchos temas alrededor. Vea aquí para un top 10 . Pero algunos son lentos, algunos tienen errores, algunos están incompletos. Odio cuando escribo una interfaz de usuario y los usuarios se quejan de que algo no funciona para ellos porque seleccionaron un tema extraño.
JGoodies es otra capa encima de Swing, como SwingX. Trata de hacer que Swing sea más agradable de usar. El sitio web se ve muy bien. Echemos un vistazo al tutorial ... hm ... sigo 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 seguro con un marco de interfaz de usuario que se esfuerza tanto por ocultar la documentación de posibles nuevos fanáticos. Eso no significa que JGoodies sea malo; Simplemente no pude encontrar nada bueno que decir al respecto, pero que se ve bien.
JavaFX. Genial, con estilo. El soporte está ahí, pero creo que es más un juguete brillante que un marco de interfaz de usuario serio. Esta sensación radica en la falta de componentes complejos de la interfaz de usuario, como las tablas de árbol. Hay un componente basado en webkit para mostrar HTML .
Cuando se introdujo, 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 ofrezca lo que necesita.
Pivote. La primera vez que escuché sobre eso. Básicamente es un nuevo marco de interfaz de usuario basado en Java2D. Así que lo probé ayer. No Swing, solo un poquito de AWT (
new Font(...)
).Mi primera impresión fue buena. Existe una extensa documentación que lo 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 de seguridad ) en la página web, para que pueda ver el código y la aplicación resultante de lado a lado.
En mi experiencia, se dedica más esfuerzo al código que a la documentación. Al mirar los documentos de Pivot, se debe haber invertido mucho 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 encontraba 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, le faltan algunos componentes de nivel superior como un componente de tabla de árbol ( PIVOT-306 ). No intenté cargar con pereza con la vista de tabla. Mi impresión es que si el modelo subyacente usa carga diferida, entonces es suficiente.
Prometedor. Si puedes, pruébalo.
fuente
SWT en sí mismo es de bastante bajo nivel, 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 usará SWT.
He estado desarrollando aplicaciones y complementos basados en Eclipse durante casi 5 años, por lo que estoy claramente sesgado. Sin embargo, también tengo una amplia experiencia en trabajar con SWT y el kit de herramientas JFace UI, que está construido encima. 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 que funcione con bastante rapidez, 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.
fuente
Me gustaría sugerir otro marco: Apache Pivot http://pivot.apache.org/ .
Lo probé brevemente y me impresionó lo que puede ofrecer como marco RIA (Rich Internet Application) ala Flash.
Representa la interfaz de usuario utilizando Java2D, minimizando así el impacto de los legados (IMO, hinchado) de Swing y AWT.
fuente
Swing + SwingX + Miglayout es mi combinación de elección. Miglayout es mucho más simple de lo que Swings percibió 200 gestores de diseño diferentes y mucho más potente. Además, le brinda la capacidad de "depurar" sus diseños, lo que es especialmente útil cuando se crean diseños complejos.
fuente
Otra opción es usar Qt Jambi . Tiene casi toda la grandeza de Qt (muchos componentes, buena documentación, fácil de usar), sin la molestia de C ++. Lo utilicé hace 3-4 años para un proyecto pequeño, incluso entonces estaba casi maduro.
Es posible que desee ver la discusión sobre Swing vs. Qt aquí .
fuente
Mi opinión personal: ir a 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 se basa completamente en Swing.
No iniciaría una aplicación de escritorio grande (o una que vaya a ser grande) sin una buena plataforma basada en el marco de la interfaz de usuario subyacente.
La otra opción es SWT junto con 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 supongo que eso también es cierto para Eclipse), pero hay algunos buenos libros que recomendaría encarecidamente.
fuente
olvidó la aplicación Java Desktop basada en JSR296 como Swing Framework incorporado en NetBeans
excluyendo AWT y JavaFX, todos sus frameworks descritos se basan en Swing, si comienza con Swing, entonces comprenderá (claramente) todos estos Swing (marcos basados)
ATW, SWT (Eclipse), Java Desktop Aplication (Netbeans), SwingX, JGoodies
Todos los marcos (no sé algo más sobre JGoodies) incl. JavaFX no ha progresado mucho tiempo, muchos marcos de trabajo basados en Swing están detenidos, si no, sin la versión más reciente
solo mi punto de vista: el mejor de ellos es SwingX, pero requiere un conocimiento más profundo sobre Swing,
Mira y siente los marcos basados en Swing
fuente
with same progress
en SWT, SwingX, nuevo propietario, nuevos modalesEstoy bastante contento con Swing para las aplicaciones de escritorio en las que he estado involucrado. Sin embargo, comparto su opinión sobre Swing que no ofrece componentes avanzados. Lo que he hecho en estos casos es ir a JIDE. No es gratis, pero tampoco es tan costoso y le brinda muchas más herramientas. Específicamente, ofrecen una TreeTable filtrable.
fuente
Yo iría con Swing. Para el diseño, usaría el diseño de formulario JGoodies. Vale la pena estudiar el documento técnico sobre el diseño del formulario 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í uno nuevo que ahora usamos en mi empresa. Lo puse en sourceforge, pero no encontré el tiempo para documentarlo mucho. 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.
Avíseme si tiene alguna pregunta al respecto, podría ayudarlo.
fuente