Swing vs JavaFx para aplicaciones de escritorio

Tengo un progtwig muy grande que actualmente usa SWT. El progtwig 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 sus pensamientos sobre tres cosas.

Mi principal preocupación es ¿qué será mejor para una aplicación de GUI de escritorio? (Miré 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 opinión). Tiene que funcionar 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 para construir desde cero?

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

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

En igualdad de condiciones, probablemente JavaFX, la API es mucho más uniforme 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 utiliza para escribirlo .

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

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

Otra cosa a tener en cuenta es (tal vez) apariencia. Si absolutamente debe tener el aspecto del sistema predeterminado, entonces JavaFX (en este momento) no puede proporcionar esto. No es una gran necesidad para mí (prefiero el aspecto FX por defecto) pero soy consciente de que algunas políticas imponen una restricción a los estilos del sistema.

Personalmente, veo a JavaFX como la biblioteca de UI “prometedora” que todavía no está allí (pero más que utilizable), y Swing como la biblioteca de interfaz de usuario heredada en el límite que está completamente presentada y respaldada por el momento, pero probablemente no será tanto en los próximos años (y, por lo tanto, es probable que FX lo supere en algún momento).

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

Lo que sería más fácil y más limpio para mantener

  • JavaFX ha introducido varias mejoras sobre Swing, como la posibilidad de marcar UI con FXML y tematizar con CSS. Tiene un gran potencial para escribir un código modular, limpio y mantenible.

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

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

Soporte de patrón MVC

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

Para obtener más información, echa un vistazo a estas preguntas frecuentes de Oracle relacionadas con JavaFX aquí.

  • Preguntas frecuentes de JavaFX

Nadie lo ha mencionado, pero JavaFX no se comstack o ejecuta en ciertas architectures consideradas “servidores” por Oracle (por ejemplo, Solaris), debido a la falta del soporte “jfxrt.jar”. Quédese con SWT, hasta nuevo aviso.

Miro alrededor para encontrar algunos componentes (de terceros) que hacen lo que quieres. He tenido 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 por teclado, y así sucesivamente. Me costó trabajo hacer que funcionaran bien porque necesitaba profundizar en muchas de las complejidades de Swing siempre que encontraba un problema. El comportamiento del mouse y el enfoque y muchas otras cosas pueden ser muy difíciles de corregir, especialmente para un usuario ocasional de Swing. Espero que JavaFX esté un poco más orientado al futuro y fuera de la caja.

En los 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 …