Swing vs JavaFx para aplicaciones de escritorio [cerrado]

195

Tengo un programa muy grande que actualmente usa SWT. El programa se puede ejecutar en Windows, Mac y Linux, y es una gran aplicación de escritorio con muchos elementos. Ahora que SWT es algo viejo, me gustaría cambiar a Swing o JavaFX. Y me gustaría escuchar tu opinión sobre tres cosas.

Mi principal preocupación es ¿qué será mejor para una aplicación GUI de escritorio? (Busqué en línea y mucha gente sugiere que JavaFX es tan bueno como Swing, pero no vi muchos argumentos válidos, excepto simples guerras de fuego de opinión). Tiene que funcionar tanto en Windows, Mac y algunas distribuciones populares de Linux.

  • ¿Qué será más limpio y más fácil de mantener?

  • ¿Y qué será más rápido de construir desde cero?

Estoy usando la metodología MVC en mi aplicación, si eso es de alguna ayuda.

Quillion
fuente
23
JavaFX es bueno si estás comenzando desde cero. También porque JavaFX está reemplazando oficialmente a Swing como la biblioteca de interfaz de usuario de Oracle para Java. Eso no significa que Swing haya desaparecido. Simplemente significa que JavaFX obtendrá mucha más atención en cada versión. Dicho esto, ya hay un millón y medio de preguntas sobre este tema en SO y en otros lugares de Google.
nico_c
3
stackoverflow.com/questions/10587713/… También mencioné Google. Mucho por ahí ya.
nico_c
Ok, entonces la sugerencia parece ser fx entonces, mantendré esto abierto, pero supongo que aceptaré una respuesta. Gracias por los enlaces.
Quillion
1
Aquí hay un resumen rápido de JavaFX, aunque cualquiera de SWT, Swing o JavaFX funcionará para producir una aplicación de escritorio.
jewelsea
Nadie lo ha mencionado, pero JavaFX no compila ni ejecuta ciertas arquitecturas consideradas "servidores" por Oracle (por ejemplo, Solaris), debido a la falta de soporte "jfxrt.jar".
Malcolm Boekhoff

Respuestas:

154

¿Qué será más limpio y más fácil de mantener?

En igualdad de condiciones, probablemente JavaFX: la API es mucho más coherente en todos los componentes. Sin embargo, esto depende mucho más de cómo se escribe el código en lugar de qué biblioteca se usa para escribirlo .

¿Y qué será más rápido de construir desde cero?

Depende mucho de lo que estés construyendo. Swing tiene más componentes disponibles (tanto de terceros como integrados) y no todos han llegado a la plataforma JavaFX más nueva todavía, por lo que puede haber una cierta cantidad de reinvención de la rueda si necesita algo poco personalizado Por otro lado, si quieres hacer transiciones / animaciones / material de video, entonces esto es mucho más fácil en FX.

Otra cosa a tener en cuenta es (quizás) verse y sentirse. Si debe tener el aspecto predeterminado del sistema, JavaFX (en la actualidad) no puede proporcionarlo. No es un gran requisito para mí (prefiero el aspecto FX predeterminado de todos modos) pero sé que algunas políticas exigen una restricción a los estilos del sistema.

Personalmente, veo JavaFX como el "prometedor" biblioteca de interfaz de usuario que no es bastante allí todavía (pero más útiles), y Swing como la biblioteca de interfaz de usuario en el límite-legado que está totalmente equipado y apoyado por el momento, pero probablemente no será tanto en los años venideros (y, por lo tanto, es probable que FX lo supere en algún momento).

Michael Berry
fuente
1
Creo que todos estos puntos se aplican al mundo .NET también en el mundo GUI de escritorio, donde Windows Presentation Foundation es el enfoque moderno que apunta a reemplazar los formularios Windows Forms antiguos, por lo que es teóricamente mejor en todos los aspectos, excepto que no lo hará (¿todavía? pero han pasado años) soporta los controles comunes nativos / aspecto de shell que espera, como un simple diálogo de archivo / navegador de directorio / control de vista de árbol.
bitooleano
84

Como dijo Oracle, JavaFX es el siguiente paso en su estrategia de cliente enriquecido basado en Java. En consecuencia, esto es lo que recomiendo para su situación:

¿Qué sería más fácil y limpio de mantener?

  • JavaFX ha introducido varias mejoras sobre Swing, como la posibilidad de marcar IU con FXML y temas con CSS. Tiene un gran potencial para escribir un código modular, limpio y fácil de mantener.

¿Qué sería más rápido construir desde cero?

  • Esto depende en gran medida de sus habilidades y las herramientas que utiliza.
    • Para swing, varios IDE ofrecen herramientas para un rápido desarrollo. Lo mejor que encontré personalmente es el generador de GUI en NetBeans .
    • JavaFX también tiene soporte de varios IDEs, aunque no tan maduro como el soporte que Swing tiene en este momento. Sin embargo, su soporte para el marcado en FXML y CSS hace que el desarrollo de GUI en JavaFX sea intuitivo.

Soporte de patrón MVC

  • JavaFX es muy amigable con el patrón MVC, y puede separar limpiamente su trabajo como: presentación (FXML, CSS), modelos (Java, objetos de dominio) y lógica (Java).
  • En mi humilde opinión, el soporte MVC en Swing no es muy atractivo. El flujo que verá en varios componentes carece de consistencia.

Para obtener más información, consulte estas publicaciones de preguntas frecuentes de Oracle sobre JavaFX aquí.

Yonathan W'Gebriel
fuente
14

Nadie lo ha mencionado, pero JavaFX no compila ni ejecuta ciertas arquitecturas consideradas "servidores" por Oracle (por ejemplo, Solaris), debido a la falta de soporte "jfxrt.jar". Seguir con SWT, hasta nuevo aviso.

Malcolm Boekhoff
fuente
13
@Quillion pide especialmente algo para construir una aplicación de escritorio que "tenga que funcionar tanto en Windows, Mac y algunos sabores de Linux populares". . Así que supongo que a él no le importa Solaris.
Tim Büthe
5

No creo que haya una respuesta correcta a esta pregunta, pero mi consejo sería seguir con SWT a menos que encuentre limitaciones severas que requieren una revisión tan masiva.

Además, SWT es en realidad más nuevo y se mantiene más activamente que Swing. (Fue desarrollado originalmente como un reemplazo para Swing usando componentes nativos).

Russell Zahniser
fuente
16
SWT nunca tuvo la intención de reemplazar a Swing. ¿Cómo es eso? Swing vino con Java de SUN y SWT solo se ejecuta en 4 o 5 plataformas y proviene originalmente de IBM y se desarrolló aún más en la Fundación Eclispe. En todo caso, podría decir: SWT tenía como objetivo reemplazar AWT.
Angel O'Sphere
0

Miraría a mi alrededor para encontrar algunos componentes (¿de terceros?) Que hacen lo que quieres. Tuve que crear componentes Swing personalizados para una vista de agenda donde puede reservar múltiples recursos, así como una cuadrícula similar a Excel que funciona bien con la navegación del teclado, etc. Me costó mucho hacer que funcionaran bien porque necesitaba profundizar en muchas de las complejidades de Swing cada vez que me encontraba con un problema. El comportamiento del mouse y del foco y muchas otras cosas pueden ser muy difíciles de corregir, especialmente para un usuario casual de Swing. Espero que JavaFX esté un poco más orientado al futuro y fuera de la caja.

eriksensei
fuente
0

En portátiles más antiguos con video integrado, la aplicación Swing se inicia y funciona mucho más rápido que la aplicación JavaFX. En cuanto al desarrollo, recomendaría cambiar a Scala: la aplicación Scala Swing comparable contiene 2..3 veces menos código que Java. En cuanto a Swing vs SWT: Netbeans GUI considerablemente más rápido que Eclipse ...

usuario2053898
fuente
Es bueno mencionar Scala Swing
sorteo el