Swing vs JavaFx pour les applications de bureau

J’ai un très gros programme qui utilise actuellement SWT. Le programme peut être exécuté à la fois sur Windows, Mac et Linux, et il s’agit d’une application de bureau volumineuse avec de nombreux éléments. Maintenant que SWT est un peu vieux, j’aimerais passer à Swing ou à JavaFX. Et j’aimerais entendre vos pensées sur trois choses.

Ma principale préoccupation est ce qui sera mieux pour une application graphique de bureau? (J’ai regardé en ligne et beaucoup de gens suggèrent que JavaFX est aussi bon que Swing, mais je n’ai pas vu beaucoup d’arguments valides, sauf les guerres d’opinion simples). Il doit fonctionner sur Windows, Mac et certaines dissortingbutions Linux populaires.

  • Qu’est-ce qui sera plus propre et plus facile à entretenir?

  • et qu’est-ce qui sera plus rapide à construire à partir de zéro?

J’utilise la méthologie MVC dans mon application, si cela peut vous aider.

Qu’est-ce qui sera plus propre et plus facile à entretenir?

Toutes choses égales par ailleurs, probablement JavaFX – l’API est beaucoup plus cohérente entre les composants. Cependant, cela dépend beaucoup plus de la manière dont le code est écrit que de la bibliothèque utilisée pour l’écrire .

Et quoi de plus rapide à construire à partir de zéro?

Fortement dépendant de ce que vous construisez. Swing a plus de composants à sa disposition (tiers et intégré) et tous ne sont pas encore arrivés à la nouvelle plate-forme JavaFX. Il peut donc y avoir une certaine quantité de réinvention de la roue si vous avez besoin de quelque chose. peu coutume. Par contre, si vous voulez faire des transitions / animations / vidéos, alors ce sera plus facile avec FX.

Une autre chose à garder à l’esprit est (peut-être) l’apparence. Si vous devez absolument avoir l’apparence du système par défaut, JavaFX (à l’heure actuelle) ne peut pas le fournir. Pas un must pour moi (je préfère le look FX par défaut), mais je suis conscient que certaines politiques imposent une ressortingction aux styles de système.

Personnellement, je considère que JavaFX est la bibliothèque d’interface utilisateur “à venir” qui n’est pas encore disponible (mais plus que utilisable), et Swing en tant que bibliothèque d’interface utilisateur limitee et complète, mais qui ne sera probablement pas disponible. tant dans les années à venir (et donc les chances sont que FX va dépasser à un moment donné.)

Comme indiqué par Oracle, JavaFX est la prochaine étape de leur stratégie client riche basée sur Java. En conséquence, voici ce que je recommande pour votre situation:

Qu’est-ce qui serait plus facile et plus propre à entretenir?

  • JavaFX a introduit plusieurs améliorations par rapport à Swing, telles que la possibilité de baliser les interfaces utilisateur avec FXML et le thème avec CSS. Il a un grand potentiel pour écrire un code modulaire, propre et maintenable.

Que serait plus rapide de construire à partir de zéro

  • Cela dépend fortement de vos compétences et des outils que vous utilisez.
    • Pour le swing, divers IDE offrent des outils de développement rapide. Le meilleur que j’ai personnellement trouvé est le générateur d’interfaces graphiques dans NetBeans .
    • JavaFX est également pris en charge par différents IDE, mais il n’est pas aussi mature que le support actuel de Swing. Cependant, sa prise en charge du balisage dans FXML & CSS rend le développement de l’interface graphique intuitive sur JavaFX intuitif.

MVC Pattern Support

  • JavaFX est très convivial avec le modèle MVC, et vous pouvez séparer proprement votre travail comme: présentation (FXML, CSS), modèles (Java, objects de domaine) et logique (Java).
  • IMHO, le support de MVC dans Swing n’est pas très attrayant. Le stream que vous verrez à travers différents composants manque de cohérence.

Pour plus d’informations, jetez un coup d’oeil à ces questions postées par Oracle concernant JavaFX ici.

  • Questions fréquemment posées sur JavaFX

Personne ne l’a mentionné, mais JavaFX ne comstack pas ou ne s’exécute pas sur certaines architectures considérées comme “serveurs” par Oracle (par exemple Solaris), à cause du support “jfxrt.jar” manquant. Restez avec SWT, jusqu’à nouvel ordre.

Je ne pense pas qu’il y ait une seule bonne réponse à cette question, mais mon conseil serait de restr sur SWT à moins que vous renconsortingez des limitations sévères qui nécessitent une refonte si massive.

En outre, SWT est en réalité plus récent et plus activement maintenu que Swing. (Il a été initialement développé pour remplacer Swing en utilisant des composants natifs).

Je regarderais autour de vous pour trouver des composants (tiers?) Qui font ce que vous voulez. J’ai dû créer des composants Swing personnalisés pour une vue d’agenda où vous pouvez réserver plusieurs ressources, ainsi qu’une grid de type Excel qui fonctionne bien avec la navigation au clavier, etc. J’ai eu un moment terrible à les amener à bien travailler parce que je devais me plonger dans les nombreuses subtilités de Swing chaque fois que je rencontrais un problème. Le comportement de la souris et de la mise au point et beaucoup d’autres choses peuvent être très difficiles à obtenir, en particulier pour un utilisateur occasionnel de Swing. J’espère que JavaFX est un peu plus orienté vers l’avenir et lisse.

Sur les anciens ordinateurs portables avec vidéo intégrée, l’application Swing démarre et fonctionne beaucoup plus rapidement que l’application JavaFX. En ce qui concerne le développement, je recommanderais de passer à Scala – l’application Scala Swing comparable contient 2,3 fois moins de code que Java. Comme pour Swing vs SWT: l’interface graphique de Netbeans est bien plus rapide que celle d’Eclipse …