Swing vs JavaFx for desktop applications [fermé]

195

J'ai un très gros programme qui utilise actuellement SWT. Le programme peut être exécuté sur Windows, Mac et Linux, et c'est une grande application de bureau avec de nombreux éléments. Maintenant que SWT est un peu vieux, je voudrais passer à Swing ou JavaFX. Et j'aimerais entendre vos réflexions sur trois choses.

Ma principale préoccupation est ce qui sera mieux pour une application GUI 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, sauf de simples guerres de flamme 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 à construire à partir de zéro?

J'utilise la méthologie MVC dans mon application, si cela peut vous être utile.

Quillion
la source
23
JavaFX est bon, c'est que vous partez de zéro. Aussi parce que JavaFX remplace officiellement Swing comme bibliothèque d'interface utilisateur d'Oracle pour Java. Cela ne signifie pas que Swing est supprimé. Cela signifie simplement que JavaFX recevra beaucoup plus d'attention dans chaque version. Cela dit, il y a déjà un million et demi de questions sur ce sujet sur SO et ailleurs sur Google.
nico_c
3
stackoverflow.com/questions/10587713/… J'ai également mentionné Google. Beaucoup là-bas déjà.
nico_c
Ok donc la suggestion semble vraiment être fx alors, je garderai ceci ouvert, mais j'accepterai une réponse je suppose. Merci pour les liens.
Quillion
1
Voici un bref résumé de JavaFX, bien que SWT, Swing ou JavaFX fonctionnera pour produire une application de bureau.
jewelsea
Personne ne l'a mentionné, mais JavaFX ne compile pas ou ne s'exécute pas sur certaines architectures considérées comme "serveurs" par Oracle (par exemple Solaris), en raison du support "jfxrt.jar" manquant.
Malcolm Boekhoff

Réponses:

154

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 la façon 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?

Très dépendant de ce que vous construisez. Swing a plus de composants (tiers ou intégrés) et tous n'ont pas encore fait leur chemin vers la nouvelle plate-forme JavaFX, il peut donc y avoir une certaine quantité de réinventer la roue si vous avez besoin de quelque chose peu personnalisé. D'un autre côté, si vous voulez faire des transitions / animations / vidéos, alors c'est des ordres de grandeur plus faciles dans FX.

Une autre chose à garder à l'esprit est (peut-être) l'apparence. Si vous devez absolument avoir l'aspect et la convivialité du système par défaut, alors JavaFX (à l'heure actuelle) ne peut pas le fournir. Pas un gros must have pour moi (je préfère le look FX par défaut de toute façon) mais je suis conscient que certaines politiques imposent une restriction aux styles de système.

Personnellement, je vois JavaFX comme « et à venir » bibliothèque d'interface utilisateur qui est pas tout à fait encore là (mais plus utilisable), et Swing comme la bibliothèque de l' interface utilisateur-legacy limite qui est entièrement comporté et pris en charge pour le moment, mais ne sera probablement pas tant dans les années à venir (et donc les chances sont que FX le dépassera à un moment donné.)

Michael Berry
la source
1
Je crois que ces points s'appliquent tous au monde .NET ainsi qu'au monde de l'interface graphique de bureau, où Windows Presentation Foundation est l'approche moderne visant à remplacer les anciens formulaires Windows, il est donc théoriquement meilleur à tous égards, sauf qu'il ne le fera pas (encore? mais cela fait des années) prend en charge les contrôles communs natifs / l'apparence du shell que vous attendez, comme une simple boîte de dialogue de fichier / navigateur de répertoire / contrôle d'arborescence.
bitoolean
84

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

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.

Quel serait plus rapide à 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'interface graphique dans NetBeans .
    • JavaFX prend également en charge divers IDE, bien qu'il ne soit pas aussi mature que le support de Swing pour le moment. Cependant, sa prise en charge du balisage dans FXML et CSS rend le développement de l'interface graphique sur JavaFX intuitif.

Prise en charge des modèles MVC

  • 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, objets de domaine) et logique (Java).
  • À mon humble avis, le support MVC dans Swing n'est pas très attrayant. Le flux que vous verrez entre les différents composants manque de cohérence.

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

Yonathan W'Gebriel
la source
14

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

Malcolm Boekhoff
la source
13
@Quillion demande spécialement quelque chose pour construire une application de bureau qui "doit fonctionner à la fois sur Windows, Mac et certaines versions Linux populaires". . Je suppose donc qu'il ne se soucie pas de Solaris.
Tim Büthe
5

Je ne pense pas qu'il y ait une seule bonne réponse à cette question, mais mon conseil serait de rester avec SWT à moins que vous rencontriez des limitations sévères qui nécessitent une refonte aussi massive.

De plus, SWT est en fait plus récent et plus activement maintenu que Swing. (Il a été initialement développé en remplacement de Swing en utilisant des composants natifs).

Russell Zahniser
la source
16
SWT n'a jamais été destiné à remplacer Swing. Comment? Swing est venu avec Java de SUN et SWT ne fonctionne que sur 4 ou 5 plates-formes et provient à l'origine d'IBM et a été développé par la Fondation Eclispe. Si vous pouviez dire: SWT visait à remplacer AWT.
Angel O'Sphere
0

Je chercherais 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 grille de type Excel qui fonctionne bien avec la navigation au clavier, etc. J'ai eu du mal à les faire fonctionner correctement 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 bien d'autres choses peuvent être très difficiles à corriger, en particulier pour un utilisateur Swing occasionnel. J'espère que JavaFX est un peu plus orienté vers l'avenir et plus fluide.

eriksensei
la source
0

Sur les ordinateurs portables plus anciens avec l'application Swing vidéo intégrée, elle 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. Quant à Swing vs SWT: l'interface graphique Netbeans est beaucoup plus rapide qu'Eclipse ...

user2053898
la source
Il est bon de mentionner Scala Swing
tirage le