Cadres d'interface graphique Java. Que choisir? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot? [fermé]


Il existe de nombreux frameworks gui pour java, mais qu'est-ce qui est reconnu comme le framework de choix d'aujourd'hui?

Ce qui suit est ma compréhension des différents frameworks, veuillez me corriger si je me trompe. C'est un ensemble de questions très vaguement défini, mais je pense toujours que c'est précieux pour quiconque pense à créer des applications gui riches.


TTA

Est le fondement même du swing, il fonctionne bien mais manque de composants avancés. Si vous avez l'intention de créer des applications riches, AWT n'est probablement pas la voie à suivre. Cependant, pour les applications gui plus petites qui ne nécessitent pas d'interfaces utilisateur riches. Cela pourrait convenir parfaitement car c'est un cadre éprouvé.


Balançoire

Basé sur AWT comme indiqué précédemment. À ses débuts, il était considéré comme lent et buggé et a amené IBM à créer SWT pour Eclipse. Cependant avec Java 5 (ou 6?) Swing est devenu le cadre de choix pour la construction de nouvelles applications. Swing a beaucoup de composants riches, mais manquent encore dans certains domaines. Un exemple étant qu'il n'y a pas de composant TreeTable complet qui peut faire le tri et le filtrage/recherche.


TAT

Créé par IBM pour Eclipse, ils semblaient penser que Swing n'était pas adapté à Eclipse à l'époque. En soi, c'est assez bas niveau, et il utilise les widgets natifs de la plate-forme via JNI. Ce n'est pas du tout lié à Swing et AWT. Leur API est cependant quelque peu maladroit et pas intuitif. Ils ont des composants avancés comme un TreeTable. (mais je ne pense pas qu'ils supportent le tri et le filtrage hors de la boîte). SWT utilise des liaisons natives (via JNI?) et la diatribe sur Internet est que ce cadre ne devrait pas être utilisé dans les projets d'aujourd'hui. (pourquoi pas?)


SwingX

Basé sur Swing et sa mission est de créer des composants riches pour swing. Encore en cours de développement. (pas très active mais.) Ont un très bel ensemble de composants, comme par exemple TreeTable. Mais le TreeTable ne prend pas en charge le filtrage et le tri pour autant que je sache. Il prend cependant en charge la recherche avec mise en évidence.

Notez que SwingX est des composants (AFAIU) qui sont des extensions ou compositions de composants swing existants


JGoodies

Un cadre dont je ne sais rien... Qu'est-ce que c'est les forces et les faiblesses? Qu'est-ce qui distingue les Jgoodies des autres?

JGoodies OTOH est sur les plafonds et les mises en page.


JavaFX

Le dernier produit phare de Java/Oracle. promettant d'être le standard de facto dans le développement d'applications de bureau ou Web riches.


Apache Pivot

Il rend l'interface utilisateur en utilisant Java2D, minimisant ainsi l'impact des héritages (IMO, gonflés) de Swing et AWT. (@Auguste Thoo)

Son objectif principal semble être RIA (Rich Internet applications), mais il semble que ce soit le cas également être appliqué aux applications de bureau. Et comme un commentaire personnel, Semble très intéressant! J'aime particulièrement que ce soit un projet apache.

Https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html


Qt Jambi

Un wrapper java à la bibliothèque qt native qui est écrite en c/c++. Très puissant, largement utilisé et accepté. A beaucoup de composants GUI et facile à utiliser API.

Http://qt-jambi.org/


Donc, pour essayer de résumer un peu ce que je demande:

Disons que je voulais créer une application de bureau aujourd'hui en Java qui implique beaucoup de composants avancés, que dois-je choisir? Et pourquoi?

Lequel de ces cadres devrait être reconnu comme obsolète et lequel devrait être reconnu comme les cadres du futur lointain?

Qu'est-ce que le framework standard de facto d'aujourd'hui et quels outils utilisez-vous pour créer des applications java gui?


Je pourrais regretter d'avoir demandé cela, mais je l'essaierai de toute façon:

C#/. Net est dit avoir un très bon ensemble de composants faciles à utiliser qui peuvent être fléchis dans toutes les directions possibles. Et après avoir étudié différents frameworks java dans une certaine mesure, je n'arrive pas à dire la même chose à propos de Java. Pourquoi est-ce? Pourquoi java (qui est le langage de programmation le plus utilisé au monde) n'a-t-il pas le même ensemble de composants GUI?

Est-ce juste que java a basé ses composants gui à un niveau beaucoup plus bas, et il est possible d'écrire tous ces composants avancés que je recherche, mais vous devez faire beaucoup sinon tout le travail vous-même?

Author: netbrain, 2011-09-09

9 answers

Arbre de Décision:

  1. Les frameworks comme Qt et SWT ont besoin de DLL natives. Vous devez donc vous demander: Toutes les plates-formes nécessaires sont-elles prises en charge? Pouvez-vous empaqueter les DLL natives avec votre application?

    Voir ici, comment faire pour SWT.

    Si vous avez le choix ici, vous devriez préférer Qt à SWT. Qt a été développé par des personnes qui comprennent l'interface utilisateur et le bureau tandis que SWT a été développé par nécessité pour rendre Eclipse plus rapide. C'est plus un patch de performances pour Java 1.4 qu'un framework d'interface utilisateur. Sans JFace, il vous manque de nombreux composants d'interface utilisateur majeurs ou des fonctionnalités très importantes des composants d'interface utilisateur (comme le filtrage sur les tables).

    Si SWT manque une fonctionnalité dont vous avez besoin, le framework est quelque peu hostile à son extension. Par exemple, vous ne pouvez pas y étendre de classe (les classes ne sont pas finales, elles lèvent simplement des exceptions lorsque le paquet de this.getClass() n'est pas org.eclipse.swt et vous ne pouvez pas ajouter de nouvelles classes dans ce paquet car il est signé).

  2. Si vous avez besoin d'une solution Java pure et native, qui vous laisse avec le reste. Commençons par AWT, Swing, SwingX - the Swing way.

    AWT est obsolète. Swing est obsolète (peut-être moins, mais pas beaucoup de travail a été fait sur Swing pour les 10 dernières années). Vous pourriez dire que Swing était bon pour commencer, mais nous savons tous que le code pourrit. Et cela est particulièrement vrai pour les interfaces utilisateur aujourd'hui.

    Cela vous laisse avec SwingX. Après une longue période de lente progression, le développement a repris. L'inconvénient majeur de Swing est qu'il s'accroche à de vieilles idées qui étaient très rares il y a 15 ans, mais qui se sentent "maladroites" aujourd'hui. Par exemple, les vues de table prennent en charge le filtrage et le tri, mais vous devez toujours le configurer. Vous devrez écrire beaucoup de code de plaque de chaudière juste pour obtenir une interface utilisateur décente qui se sent moderne.

    Un autre point faible est la thématique. À ce jour, il y a beaucoup de thèmes autour. Voir ici pour un top 10. Mais certains sont lents, certains sont buggés, certains sont incomplètes. Je déteste quand j'écris une interface utilisateur et que les utilisateurs se plaignent que quelque chose ne fonctionne pas pour eux parce qu'ils ont sélectionné un thème étrange.

  3. JGoodies est une autre couche au-dessus de Swing, comme SwingX. Il essaie de rendre le swing plus agréable à utiliser. Le site web a fière allure. Jetons un coup d'oeil au tutoriel ... hm ... toujours à la recherche ... accrocher. Il semble qu'il n'y ait aucune documentation sur le site Web. Google à la rescousse. Nope, pas de tutoriels utiles à tout.

    Je ne me sens pas confiant avec un framework d'interface utilisateur qui essaie si fort de cacher la documentation aux nouveaux fans potentiels. Cela ne signifie pas que JGoodies est mauvais; je ne pouvais tout simplement pas trouver quelque chose de bon à dire à ce sujet, mais que cela a l'air bien.

  4. JavaFX. Grand, élégant. Le soutien est là, mais je pense que c'est plus un jouet brillant qu'un cadre d'interface utilisateur sérieux. Ce sentiment s'enracine dans le manque de composants d'interface utilisateur complexes comme les tables d'arborescence. Il existe un composant basé sur webkit à afficher HTML .

    Quand il a été introduit, ma première pensée était "cinq ans trop tard."Si votre objectif est une belle application pour les téléphones ou les sites Web, bien. Si votre objectif est une application de bureau professionnelle, assurez-vous qu'elle offre ce dont vous avez besoin.

  5. Pivot. Première fois que j'ai entendu à ce sujet. C'est essentiellement un nouveau framework d'interface utilisateur basé sur Java2D. Donc je l'ai essayé hier. Pas de swing, juste un tout petit peu d'AWT (new Font(...)).

    Ma première impression a été agréable. Il existe une documentation complète qui vous aide à obtenir commencé. La plupart des exemples viennent avec des démos en direct (Remarque: Vous devez avoir Java activé dans votre navigateur Web; c'est un risque de sécurité ) dans la page Web, de sorte que vous pouvez voir le code et l'application résultante côte à côte.

    D'après mon expérience, plus d'efforts vont dans le code que dans la documentation. En regardant les documents Pivot, beaucoup d'efforts ont dû être consacrés au code. Notez qu'il existe actuellement un bogue qui empêche certains exemples de fonctionner (PIVOT-858 ) dans votre navigateur.

    Ma deuxième impression de Pivot est qu'il est facile à utiliser. Quand je rencontrais un problème, je pouvais généralement le résoudre rapidement en regardant un exemple. Il me manque cependant une référence de tous les styles pris en charge par chaque composant.

    Comme avec JavaFX, il manque des composants de niveau supérieur comme un composant de table arborescente ( PIVOT-306). Je n'ai pas essayé le chargement paresseux avec la vue de table. Mon impression est que si le modèle sous-jacent utilise chargement paresseux, alors ça suffit.

    Prometteur. Si vous le pouvez, essayez-les.

 80
Author: Aaron Digulla, 2017-05-23 12:10:54

SWT en soi est assez bas niveau, et il utilise les widgets natifs de la plate-forme via JNI. Ce n'est pas du tout lié à Swing et AWT. Le Eclipse ID et toutes les applications Client riches basées sur Eclipse, comme le Vuze BitTorrent client , sont construits en utilisant SWT. De plus, si vous développez des plugins Eclipse, vous utiliserez généralement SWT.
Je développe des applications et des plugins basés sur Eclipse depuis presque 5 ans maintenant, donc je suis clairement biaisé. Cependant, j'ai aussi vaste expérience dans le travail avec SWT et le JFace UI toolkit, qui est construit sur le dessus de celui-ci. J'ai trouvé que JFace était très riche et puissant; dans certains cas, cela pourrait même être la principale raison du choix de SWT. Il vous permet de créer une interface utilisateur de travail assez rapidement, tant qu'elle est de typeE (avec des tables, des arbres, des contrôles natifs, etc.). Bien sûr, vous pouvez également intégrer vos contrôles personnalisés, mais cela demande un effort supplémentaire.

 13
Author: Zsolt Török, 2011-09-09 12:50:48

Je voudrais proposer un autre cadre: Apache Pivot http://pivot.apache.org/.

Je l'ai essayé brièvement et j'ai été impressionné par ce qu'il peut offrir en tant que framework RIA (Rich Internet Application) ala Flash.

Il rend l'interface utilisateur en utilisant Java2D, minimisant ainsi l'impact des héritages (IMO, gonflés) de Swing et AWT.

 11
Author: Augustus Thoo, 2011-09-09 08:20:53

Swing + SwingX + Miglayout est ma combinaison de choix. Miglayout est tellement plus simple que Swings perçu 200 gestionnaires de mise en page différents et beaucoup plus puissant. En outre, il vous offre la possibilité de "déboguer" vos mises en page, ce qui est particulièrement pratique lors de la création de mises en page complexes.

 9
Author: helpermethod, 2011-09-09 14:15:09

Une autre option consiste à utiliser Qt Jambi. Il a presque toute la grandeur de Qt (nombreux composants, bonne documentation, facile à utiliser), sans les tracas du C++. Je l'ai utilisé il y a 3-4 ans pour un petit projet, même alors il était presque mature.

Vous voudrez peut-être voir la discussion sur Swing vs Qt ici.

 9
Author: nimcap, 2017-05-23 11:33:26

Mon avis personnel: Optez pour le Swing avec la plate-forme NetBeans.

Si vous avez besoin de composants avancés (plus que les offres NetBeans), vous pouvez facilement intégrer SwingX sans problèmes (ou JGoodies) car la plate-forme NetBeans est entièrement basée sur Swing.

Je ne démarrerais pas une grande application de bureau (ou une grande) sans une bonne plate-forme qui repose sur le framework d'interface utilisateur sous-jacent.

L'autre option est SWT avec l'éclipse RCP, mais il est plus difficile (mais pas impossible) d'intégrer des composants Swing "purs" dans une telle application.

La courbe d'apprentissage est un peu raide pour la plate-forme NetBeans (bien que je suppose que c'est également vrai pour Eclipse) mais il y a de bons livres autour desquels je recommanderais fortement.

 5
Author: a_horse_with_no_name, 2011-09-09 08:21:41

Vous avez oublié pour l'application Java Desktop basée sur JSR296 en tant que framework Swing intégré dans NetBeans

À l'exclusion de AWT et JavaFX, tous vos frameworks described sont basés sur Swing, si vous commencez par Swing, vous comprendriez (clairement) tous ces frameworks (basés sur Swing)

Il est possible de créer une application de bureau Java avec une application de bureau Java.]}

Tous les frameworks (je ne sais pas quelque chose de plus sur JGoodies) incl. JavaFX n'ont pas longtemps tout progrès, beaucoup de Frameworks basés sur Swing sont arrêtés, sinon sans la dernière version

Juste mon point de vue - le meilleur d'entre eux est SwingX, mais nécessitait une connaissance approfondie du Swing,

Look and Feel pour les frameworks basés sur Swing

 4
Author: mKorbel, 2017-05-23 12:34:59

J'ai été très satisfait de Swing pour les applications de bureau dans lesquelles j'ai été impliqué. Cependant, je partage votre point de vue sur Swing ne proposant pas de composants avancés. Ce que j'ai fait dans ces cas, c'est d'aller chercher JIDE. Ce n'est pas gratuit, mais pas cher non plus, et cela vous donne beaucoup plus d'outils sous votre ceinture. Plus précisément, ils offrent un arbre filtrable.

 3
Author: sbrattla, 2011-09-09 08:45:34

J'irais avec Swing. Pour la mise en page, j'utiliserais la mise en page du formulaire JGoodies. Il vaut la peine d'étudier le livre blanc sur la mise en page du formulaire ici - http://www.jgoodies.com/freeware/forms/

Aussi, si vous allez commencer à développer une énorme application de bureau, vous aurez certainement besoin d'un cadre. D'autres ont souligné le cadre netbeans. Je ne l'ai pas aimé tellement écrit un nouveau que nous utilisons maintenant dans mon entreprise. Je l'ai mis sur sourceforge, mais je n'ai pas trouvé le temps de le documenter beaucoup. Voici le lien pour parcourir le code:

Http://swingobj.svn.sourceforge.net/viewvc/swingobj/

La vitrine devrait vous montrer comment faire une connexion simple en fait..

Faites-moi savoir si vous avez des questions à ce sujet, je pourrais vous aider.

 3
Author: sethu, 2011-09-09 09:45:43