Application Java Desktop: SWT vs Swing [fermé]

158

Je suis développeur web à la journée et je pense créer ma première vraie application de bureau. 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'ai déjà utilisé pour des trucs Web, je connais assez bien la syntaxe et je souhaite que l'application soit multi-plateforme aussi simple que possible.

Là où je ne suis pas si sûr, c'est si je devrais utiliser SWT ou Swing. Étant donné que mon public principal utilise Windows, je souhaite le rendre aussi natif que possible. Linux et Mac devraient fonctionner, mais l'apparence n'est pas si importante ici.

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

Merci.

PS: je développe sous Windows avec Eclipse. Mais pensait jouer avec Netbeans.

Janpio
la source
Question difficile. :-) J'irais avec Swing. Mais, n'avez pas de PRO ou de CON pour cette décision.
Pablo Santa Cruz
dupliquer Q. s'il vous plaît chercher Swing vs SWT Q a déjà été demandé sur SO. FWIW, j'utilise Swing juste parce que j'ai appris de cette façon. Il existe des bibliothèques natives d'apparence et de convivialité (voir jgoodies looks)
Jason S
"créer un outil qui automatise une tâche très répétitive dans une application Web" - des informations à ce sujet? Il peut y avoir un outil existant - et je doute de la nécessité d'une application de bureau pour automatiser cela - cela peut fonctionner dans votre cas en ce moment - mais que faire si vous passez à une solution hébergée?
Nate le
Vous n'avez pas besoin d'apprendre un framework GUI pour une application de bureau. Si vous pouvez utiliser html css et js (ce que je suppose que vous êtes), vous pouvez utiliser Electron pour créer des applications natives avec des langages Web.
Pranav A.
L'électron a été inventé quelques années après avoir posé cette question;) Mais bien sûr, aujourd'hui, vous avez raison.
janpio le

Réponses:

152

Swing pour les pros:

  • 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 d'interface graphique intégré dans Netbeans et Eclipse
  • bons tutoriels en ligne par Sun / Oracle
  • Pris en charge par les extensions Java officielles (comme java OpenGL)

Contre Swing:

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

Avantages SWT:

  • utilise des éléments natifs lorsque cela est possible, donc toujours un comportement natif
  • pris en charge par eclipse, éditeur d'interface graphique VEP (VEP prend également en charge Swing et AWT)
  • grand nombre d'exemples en ligne
  • a un pont intégré awt / swt pour permettre l'utilisation des 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 d'indication)
  • la gestion des ressources natives, tandis que les composants natifs seront 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 de suppression d'un composant pour une libération automatique.
josefx
la source
33
Swing sera plus proche de "écrire une fois, courir n'importe où". SWT ressemblera plus à "écrire une fois, modifier / tester partout". Mais cette même discussion s'est produite avec d'autres langues également.
Mark
12
De manière réaliste, l'apparence et la sensation "natives" de Swing se comportent considérablement différemment de mon bureau Gnome - alors que, pour une raison quelconque, les thèmes fonctionnent assez bien, les menus ont l'air affreux et sont presque inutilisables.
Hut8
9
À partir d'Eclipse 3.7, VEP a été remplacé par WindowBuilder (qui prend également en charge Swing et SWT).
Alexey Romanov
6
L'avantage de SWT est également une moindre consommation de mémoire en raison des composants natifs. Cela devrait être souhaitable sur les machines avec une mémoire limitée et les différences de mémoire entre swing et swt peuvent être importantes dans les grandes conceptions GUI.
jantobola
1
@JanTobola C'est tout simplement faux. Les composants natifs utilisent la mémoire allouée sur le tas natif, pas seulement sur le tas Java. J'ai travaillé sur de grandes interfaces graphiques en utilisant Netbeans Platform, Eclipse RCP, SWT et Swing. ) mais ce n'est plus vrai et c'est aux développeurs de libérer beaucoup de ressources dans SWT, il y a beaucoup plus de possibilités de fuite de mémoire avec SWT alors qu'un composant non référencé finit par être "éliminé" avec Swing.
gouessej
63

Une chose importante à considérer est que certains utilisateurs et certains revendeurs (Dell) installent une machine virtuelle 64 bits sur leur Windows 64 bits, et vous ne pouvez pas utiliser la même bibliothèque SWT sur des machines virtuelles 32 bits 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. Voyez ce problème avec Azureus, par exemple, mais vous l'avez également avec Eclipse, où, à partir d'aujourd'hui, les versions sur la page de téléchargement avant ne fonctionnent pas sur une machine virtuelle 64 bits.

Ludovico Fischer
la source
2
Point intéressant. En tant qu'utilisateur, je ne sais toujours pas pourquoi c'est un si gros problème. Mais bon, c'est ainsi que je vais devoir réfléchir à cela. Merci.
janpio
btw: javaws (webstart) n'est pas disponible pour 64 IMHO
Karussell
1
@Karussell: Depuis le 3/4/2011, la JVM 64 bits de Sun pour Windows prend en charge JNLP. Je pense que c'est vrai depuis un certain temps, mais je ne sais pas combien de temps.
The Alchemist
23

swing pro:

  • Le plus grand 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 sensation natifs sont bien meilleurs pour le swing que dans les premières années
  • les performances sont comparables au swt (le swing n'est pas lent!)
  • NetBeans propose Matisse comme un constructeur de composants confortable.
  • L'intégration des composants Swing dans JavaFX est plus facile.

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

Karussell
la source
1
Oui, NetBeans a Matisse comme constructeur d'interface graphique, mais le code est vraiment détaillé, déroutant à lire et presque impossible à modifier par le code source. Si vous voulez vraiment un constructeur d'interface graphique, optez pour les éclipses WindowBuilder
Pranav A.
13

J'utiliserais Swing pour plusieurs raisons.

  • Il existe depuis plus longtemps et a fait l'objet de plus d'efforts de développement. Par conséquent, il est probablement plus complet de fonctionnalités et (peut-être) a moins de bogues.

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

  • Il semble que les modifications apportées à Swing se propagent simultanément à toutes les plates-formes, tandis que les modifications apportées à SWT semblent d'abord apparaître sous Windows, puis sous 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 assez d'expérience avec la plateforme Eclipse pour porter un jugement valide.

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

Un autre conseil, regardez dans différents gestionnaires de mise en page. 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 Forms sont à mon avis deux des meilleurs.

clartaq
la source
10

Je choisirais le swing juste parce qu'il est "natif" pour java.

De plus, jetez un œil à http://swingx.java.net/ .

mis à zéro
la source
1
Le lien est cassé!
Socrates
8

Pour vos besoins, il semble que l'essentiel sera d'utiliser Swing, car il est légèrement plus facile de démarrer et pas aussi étroitement intégré à la plate-forme native que SWT.

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

Yuval Adam
la source
6

Question interessante. Je ne connais pas trop bien SWT pour m'en vanter (contrairement à Swing et AWT) mais voici la comparaison faite 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 tutoriel sur pratiquement tout sur SWT ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

J'espère que vous prenez la bonne décision (s'il y a de bonnes décisions dans le codage) ... :-)

Buhake Sindi
la source
4
Mais notez que l'article date de 2003 ...
Alexey Romanov
4

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 d'Eclipse RCP comme cadre.

Si votre application ne devient pas trop volumineuse ou si vos exigences sont trop uniques pour être gérées par un cadre d'entreprise normal, vous pouvez sauter en toute sécurité avec 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'y a pas de réponse absolument correcte ici et les deux frameworks ont leurs propres inconvénients.

Swing Pro:

  • plus d'experts
  • plus de type Java (presque pas de champ public, pas besoin de disposer de ressource)

Pro SWT:

  • plus OS natif
  • plus rapide
nanda
la source
10
Je pense que le point «plus rapide» est très controversé.
Russ Hayward
SWT est encombrant à utiliser, j'ai du tester mon interface graphique avec chaque version de Windows, certains bugs n'étaient reproductibles que sous Windows Vista. Certaines méthodes ne sont tout simplement pas implémentées ou appellent AWT sous le capot, ce qui signifie que vous ne pouvez pas utiliser un JRE compact sans AWT et Swing sans risquer de casser SWT. J'ai commencé à utiliser SWT en 2009 et à mon humble avis, ce n'est pas plus rapide. Je vous conseille de fournir un benchmark soigneusement conçu.
gouessej
4

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

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

Pour distribuer et charger la bibliothèque SWT appropriée, vous trouverez peut-être ce lien utile: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

incomudro
la source
3

SWT a été créé en réponse à la lenteur 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 agréable qui aide beaucoup de code de plaque de chaudière.

Oliver Watkins
la source