web-dev-qa-db-fra.com

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. Il s’agit d’une application de bureau volumineuse comportant de nombreux éléments. Maintenant que SWT est un peu vieux, j'aimerais passer à Swing ou à JavaFX. Et j'aimerais entendre votre opinion sur trois choses.

Ma principale préoccupation est de savoir ce qui sera meilleur 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 valables à part de simples guerres de flammes d'opinion). Il doit fonctionner à la fois sur Windows, Mac et certaines distributions Linux populaires.

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

  • et ce qui sera plus rapide pour construire à partir de zéro?

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

185
Quillion

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

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

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

Très dépendant de ce que vous construisez. Swing a plus de composants à sa disposition (tiers et intégrés) et tous n’ont pas encore migré vers la nouvelle plate-forme JavaFX. Il est donc possible qu’il y ait une certaine quantité de réinventer la roue si vous avez besoin de quelque chose. peu coutume. D'un autre côté, si vous souhaitez effectuer des transitions/animations/vidéos, cette opération est beaucoup plus simple dans les effets 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. Ce n’est pas un gros besoin pour moi (je préfère de toute façon le look FX par défaut), mais je sais que certaines politiques imposent une restriction des styles de système.

Personnellement, je vois JavaFX comme la bibliothèque d’interface utilisateur "montante et à venir" qui n’est pas assez pour le moment (mais plus qu’utilisable), et Swing comme frontière- Une bibliothèque d’interface utilisateur héritée qui est entièrement intégrée et prise en charge pour le moment, mais ne le sera probablement pas autant dans les années à venir (et par conséquent, il est probable que FX le dépassera à un moment donné.)

149
Michael Berry

Comme indiqué par Oracle, JavaFX est la prochaine étape de leur stratégie de 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 la thématisation avec CSS. Il a un grand potentiel pour écrire un code modulaire, propre et maintenable.

Quel 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 pour un développement rapide. Le meilleur que j'ai personnellement trouvé est le générateur d'interface graphique dans NetBeans .
    • JavaFX est également pris en charge par différents IDE, mais pas aussi mature que le support que Swing a pour le moment. Cependant, sa prise en charge du balisage dans FXML et CSS rend le développement d'interface graphique sur JavaFX intuitif.

Prise en charge de modèles MVC

  • JavaFX est très convivial avec le modèle MVC, et vous pouvez clairement séparer votre travail en tant que: présentation (FXML, CSS), modèles (Java, objets de domaine) et logique (Java).
  • IMHO, le support de MVC dans Swing n'est pas très attrayant. Le flux que vous verrez à travers divers composants manque de cohérence.

Pour plus d'informations, veuillez consulter ces FAQ publications d'Oracle concernant JavaFX ici.

80
Yonathan W'Gebriel

Personne ne l'a mentionné, mais JavaFX ne compile ni ne s'exécute sur certaines architectures considérées comme des "serveurs" par Oracle (Solaris, par exemple), en raison de l'absence de la prise en charge "jfxrt.jar". Coller avec SWT, jusqu'à nouvel ordre.

14
Malcolm Boekhoff

Je ne pense pas qu'il y ait une bonne réponse à cette question, mais mon conseil serait de rester avec SWT, sauf si vous rencontrez des limitations sévères nécessitant une refonte aussi importante.

En outre, SWT est en fait plus récent et plus activement géré que Swing. (C'était développé à l'origine pour remplacer Swing à l'aide de composants natifs).

5
Russell Zahniser

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 dans laquelle vous pouvez réserver plusieurs ressources, ainsi qu'une grille de type Excel qui fonctionne bien avec la navigation au clavier, etc. Je les ai terriblement mal obligés de les faire travailler, car je devais approfondir les nombreuses complexités de Swing chaque fois que je rencontrais un problème. Le comportement de la souris et de la mise au point, entre autres, peut être très difficile à obtenir, en particulier pour un utilisateur occasionnel de Swing. J'espère que JavaFX est un peu plus orienté vers l'avenir et plus fluide.

0
eriksensei

Sur les ordinateurs portables plus anciens 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 vous recommande de passer à Scala - comparable Scala. L'application Swing contient 2,3 fois moins de code que Java. En ce qui concerne Swing vs SWT: Netbeans GUI considérablement plus rapide que Eclipse ...

0
user2053898