web-dev-qa-db-fra.com

Java Application de bureau: SWT ou Swing

Je suis un développeur Web de jour et je songe à créer ma première application de bureau réelle. L'idée est de construire un outil qui automatise une tâche très répétitive dans une application Web où aucune API n'est disponible.

Je sais que je veux utiliser Java. Je l'avais déjà utilisée pour le Web, connaissais assez bien la syntaxe et souhaitais que l'application soit transversale autant que possible.

Là où je ne suis pas sûr de savoir si je devrais utiliser SWT ou Swing. Étant donné que mon public principal utilise Windows, je souhaite l’avoir le plus natif possible. Linux et Mac devraient fonctionner, mais les apparences ne sont pas si importantes ici.

Alors, quels sont les arguments pour et contre chaque Framework, Swing ou SWT?

Merci.

PS: Je développe sous Windows en utilisant Eclipse. Mais pensait à jouer avec Netbeans.

154
janpio

Pro Swing:

  • partie de la bibliothèque Java, pas besoin de bibliothèques natives supplémentaires
  • fonctionne de la même manière sur toutes les plateformes
  • Éditeur graphique intégré dans Netbeans et Eclipse
  • bons tutoriels en ligne de Sun/Oracle
  • Pris en charge par Java officielles (comme Java OpenGL))

Inconvénient:

  • L'aspect et la convivialité natifs peuvent se comporter différemment du système natif réel.
  • les composants lourds (natif/awt) masquent les composants d'orientation, ce qui n'est pas un problème la plupart du temps, car l'utilisation de composants lourds est plutôt rare

Pros SWT:

  • utilise des éléments natifs lorsque c'est possible, donc toujours un comportement natif
  • supporté par Eclipse, éditeur graphique VEP (VEP supporte également Swing et AWT)
  • grand nombre d'exemples en ligne
  • a un pont awt/swt intégré pour permettre l'utilisation de composants awt et swing

Contre SWT:

  • nécessite des bibliothèques natives pour chaque système pris en charge
  • peut ne pas prendre en charge tous les comportements sur tous les systèmes en raison des ressources natives utilisées (options de conseil)
  • la gestion des ressources natives, tandis que les composants natifs sont souvent supprimés avec leur parent, d'autres ressources telles que les polices doivent être libérées manuellement ou enregistrées en tant qu'écouteur dispose d'un composant en vue de sa libération automatique.
150
josefx

Il est important de noter que certains utilisateurs et certains revendeurs (Dell) installent un VM 64 bits sur leur Windows 64 bits et que vous ne pouvez pas utiliser la même bibliothèque SWT sur des ordinateurs virtuels 32 et 64 bits.

Cela signifie que vous devrez distribuer et tester différents packages, selon que les utilisateurs disposent d'une machine virtuelle Java 32 bits ou 64 bits. Voir ce problème avec Azureus, par exemple, mais vous l'avez également avec Eclipse, où, à ce jour, les versions sur la page de téléchargement avant ne fonctionnent pas sur une machine virtuelle 64 bits.

63
Ludovico Fischer

swing pro:

  • Le plus gros avantage de swing IMHO est que vous n’avez pas besoin d’expédier les bibliothèques avec votre application (ce qui évite des dizaines de Mo (!)).
  • L'aspect et la convivialité des autochtones sont bien meilleurs pour le swing qu'au début
  • la performance est comparable à swt (le swing n'est pas lent!)
  • NetBeans propose Matisse en tant que constructeur de composants confortable.
  • L'intégration des composants Swing dans JavaFX est plus simple.

Mais en fin de compte, je ne suggérerais pas d’utiliser le swing "pur" ou swt ;-) Il existe plusieurs cadres d’application pour le swing/swt out. Regardez ici . Les plus gros joueurs sont Netbeans (swing) et Eclipse (swt). Un autre cadre de Nice pourrait être Griffon et un "ensemble de composants" de Nice est pivot (swing). Griffon est très intéressant car il intègre beaucoup de bibliothèques et pas seulement swing ; aussi pivot, swt, etc.

23
Karussell

J'utiliserais Swing pour plusieurs raisons.

  • Il existe depuis plus longtemps et a fait l'objet d'efforts de développement plus importants. Par conséquent, il est probable que plus de fonctionnalités soient complètes et (peut-être) moins de bogues.

  • Il existe de nombreux documents et conseils sur la production d’applications performantes.

  • Il semble que les modifications apportées à Swing se propagent simultanément sur toutes les plates-formes, tandis que les modifications apportées à SWT semblent apparaître d'abord sur Windows, puis sur Linux.

Si vous souhaitez créer une application très riche en fonctionnalités, vous pouvez consulter le NetBeans RCP (Rich Client Platform). Il y a une courbe d'apprentissage, mais vous pouvez créer rapidement de belles applications avec un peu de pratique. Je n'ai pas suffisamment d'expérience avec la plate-forme Eclipse pour me prononcer correctement.

Si vous ne souhaitez pas utiliser l'intégralité du RCP, NetBeans comporte également de nombreux composants utiles qui peuvent être extraits et utilisés indépendamment.

Un autre conseil, regardez dans différents gestionnaires de disposition. Ils m'ont fait trébucher pendant longtemps quand j'apprenais. Certains des meilleurs ne sont même pas dans la bibliothèque standard. Les outils MigLayout (pour Swing et SWT) et JGoodies sont deux des meilleurs à mon avis.

13
clartaq

Je choisirais swing uniquement parce que c'est "natif" pour Java.

De plus, regardez http://swingx.Java.net/ .

10
zeroed

Pour répondre à vos besoins, il semble que le résultat final soit l’utilisation de Swing, car il est légèrement plus facile de démarrer et n’est pas aussi étroitement intégrée à la plate-forme native que SWT.

Swing est généralement une valeur sûre.

8
Yuval Adam

Question interessante. Je ne connais pas trop bien SWT pour me vanter (contrairement à Swing et AWT), mais voici la comparaison effectuée sur SWT/Swing/AWT.

http://www.developer.com/Java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

Et voici le site où vous pouvez obtenir un didacticiel sur pratiquement tout ce qui concerne SWT ( http://www.Java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

J'espère que vous prendrez une bonne décision (s'il y a de bonnes décisions en matière de codage) ... :-)

6
Buhake Sindi

Une chose à considérer: les lecteurs d’écran

Pour certaines raisons, certains composants Swing ne fonctionnent pas correctement avec un lecteur d’écran (et le Java AccessBridge pour Windows). Sachez que différents lecteurs d’écran entraînent un comportement différent. Et d’après mon expérience, l’arborescence SWT fonctionne bien mieux que Swing-Tree en combinaison avec un lecteur d'écran. Ainsi, notre application a fini par utiliser à la fois les composants SWT et Swing.

Pour la distribution et le chargement de la bibliothèque SWT appropriée, vous pouvez trouver ce lien utile: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at -runtime-191

4
incomudro

Si vous envisagez de créer des applications fonctionnelles complètes avec plus d'une poignée de fonctionnalités, je vous suggérerai de passer directement à l'utilisation de Eclipse RCP en tant que cadre.

Si votre application ne devient pas trop volumineuse ou si vos exigences sont trop uniques pour être gérées par un cadre métier normal, vous pouvez sans risque vous lancer dans Swing.

À la fin de la journée, je vous suggère d'essayer les deux technologies pour trouver celle qui vous convient le mieux. Comme Netbeans vs Eclipse vs IntelliJ, il n’ya pas de réponse absolument correcte ici et les deux frameworks ont leurs propres inconvénients.

Pro Swing:

  • plus d'experts
  • plus semblable à Java (presque pas de champ public, pas besoin de disposer sur une ressource)

Pro SWT:

  • plus natif d'OS
  • plus rapide
4
nanda

SWT a été créé en réponse à la morosité de Swing au tournant du siècle. Maintenant que les différences de performances deviennent négligeables, je pense que Swing est une meilleure option pour vos applications standard. SWT/Eclipse a un cadre Nice qui aide avec beaucoup de code de plaque de chaudière.

3
Oliver Watkins