Framework Java GUI. Que choisir? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot? [fermé]

228

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

Ce qui suit est ma compréhension des différents cadres, veuillez me corriger si je me trompe. Il s'agit d'un ensemble de questions très vaguement défini, mais je pense toujours que c'est utile pour quiconque envisage de créer de riches applications graphiques.


AWT

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 petites applications graphiques qui ne nécessitent pas d'interfaces utilisateur riches. Cela pourrait parfaitement convenir car c'est un cadre éprouvé et éprouvé.


Balançoire

Basé sur AWT comme indiqué précédemment. À ses débuts, il était considéré comme lent et bogué 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 manque toujours dans certaines régions. Un exemple étant qu'il n'y a pas de composant TreeTable complet qui peut faire le tri et le filtrage / recherche.


SWT

Créés 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 plateforme via JNI. Il n'est pas du tout lié à Swing et AWT. Leur API est cependant quelque peu maladroite et pas intuitive. Ils ont des composants avancés comme un TreeTable. (mais je ne pense pas qu'ils prennent en charge 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 le swing. Toujours en développement. (pas très actif cependant.) Avoir 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 des compositions de composants Swing existants


JGoodies

Un cadre dont je ne connais rien ... Quels sont ses points forts et ses points faibles? Qu'est-ce qui distingue les Jgoodies des autres?

JGoodies OTOH concerne les PLAF et les mises en page.


JavaFX

Le dernier fleuron de Java / Oracle. promettant d'être la norme de facto dans le développement d'applications bureautiques ou Web riches.


Apache Pivot

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

Son objectif principal semble être le RIA (applications Internet riches), mais il semble qu'il puisse également être appliqué aux applications de bureau. Et comme commentaire personnel, ça a l'air très intéressant! J'aime particulièrement que c'est un projet apache.

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


Qt Jambi

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

http://qt-jambi.org/


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

Supposons que je veuille créer une application de bureau aujourd'hui en Java qui implique de nombreux 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 le cadre d'un avenir lointain?

Quel est le cadre standard de facto d'aujourd'hui et quels outils utilisez-vous pour créer des applications jui gui?


Je pourrais regretter d'avoir posé cette question, mais j'essaierai mal de toute façon:

C # /. Net aurait 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 cadres java dans une certaine mesure, je ne peux pas sembler en dire autant 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 simplement 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 cherche, mais vous devez faire beaucoup sinon la totalité du travail vous-même?

netbrain
la source
Je ne savais pas que SWT était "basé sur une combinaison d'AWT et de Swing". Est-ce vraiment le cas? Je pensais que c'était de la pure JNI pour invoquer le système de fenêtrage de l'OS ...
Rich
@ Rich Oh, il a été dit dans l'un des commentaires des réponses. J'ai simplement supposé qu'ils savaient de quoi ils parlaient.
netbrain
4
Je pense que vous confondez "UI Toolkit" et "GUI framework". AWT, Swing et SWT sont des boîtes à outils d'interface utilisateur, mais je ne les appellerais certainement pas "cadres". Les cadres sont basés sur une boîte à outils d'interface utilisateur donnée et fournissent la colle pour créer votre application. Tout d'abord, vous devez choisir la boîte à outils de l'interface utilisateur, puis choisir un cadre qui fonctionne sur cette boîte à outils. FWIW, je choisirais Swing avec mon propre framework Guts-GUI fait maison :-)
jfpoilpret
1
C'est presque toujours Swing vs. SWT (pour moi du moins), pour une petite comparaison, vous pouvez vérifier Quelles sont les principales choses qu'un programmeur Java SWT expérimenté devrait être au courant lors du passage à Swing? ..
Sorcier
2
JavaFX ne fait plus partie de l'aperçu SDK et il est disponible pour une utilisation en production. veuillez mettre à jour ce message.

Réponses:

79

Arbre de décision:

  1. Les frameworks comme Qt et SWT nécessitent des DLL natives. Vous devez donc vous demander: toutes les plateformes nécessaires sont-elles prises en charge? Pouvez-vous empaqueter les DLL natives avec votre application?

    Voir ici, comment faire cela 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 correctif de performance 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 cadre est quelque peu hostile à son extension. Par exemple, vous ne pouvez pas étendre de classe dans celle-ci (les classes ne sont pas finales, elles lèvent simplement des exceptions lorsque le package de this.getClass()ne l'est pas org.eclipse.swtet vous ne pouvez pas ajouter de nouvelles classes dans ce package car il est signé).

  2. Si vous avez besoin d'une solution Java pure et native, cela vous laisse avec le reste. Commençons par AWT, Swing, SwingX - la manière Swing.

    AWT est obsolète. Swing est obsolète (peut-être moins, mais peu de travail a été fait sur Swing au cours des 10 dernières années). On pourrait 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 progrès lents, le développement a repris . L'inconvénient majeur de Swing est qu'il s'accroche à certaines vieilles idées qui, il y a 15 ans, sont très saignantes mais qui semblent aujourd'hui "maladroites". Par exemple, les vues de tableau 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 et moderne.

    Un autre point faible est le thème. À 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 incomplets. Je déteste quand j'écris une interface utilisateur et 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 Swing plus agréable à utiliser. Le site Web a fière allure. Jetons un coup d'oeil au tutoriel ... hm ... toujours à la recherche ... attendez. Il semble qu'il n'y ait aucune documentation sur le site Web. Google à la rescousse . Non, pas de tutoriels utiles du tout.

    Je ne me sens pas confiant avec un cadre d'interface utilisateur qui essaie si fort de cacher la documentation aux nouveaux fans potentiels. Cela ne signifie pas que JGoodies est mauvais; Je n'ai rien trouvé de bon à dire à ce sujet mais ça a l'air bien.

  4. JavaFX. Super, élégant. Le support est là mais je pense que c'est plus un jouet brillant qu'un cadre d'interface utilisateur sérieux. Ce sentiment trouve son origine dans le manque de composants d'interface utilisateur complexes comme les tables arborescentes. Il existe un composant Webkit pour afficher le HTML .

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

  5. Pivot. La première fois que j'en ai entendu parler. Il s'agit essentiellement d'un nouveau cadre d'interface utilisateur basé sur Java2D. J'ai donc essayé hier. No Swing, juste un tout petit peu d'AWT ( new Font(...)).

    Ma première impression fut agréable. Il existe une documentation complète qui vous aide à démarrer. La plupart des exemples sont livrés avec des démos en direct (Remarque: vous devez avoir Java activé dans votre navigateur Web; c'est un risque pour la sécurité ) dans la page Web, afin que vous puissiez voir le code et l'application résultante côte à côte.

    D'après mon expérience, plus d'efforts sont consacrés au code qu'à 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. Lorsque 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 certains 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 un chargement paresseux, cela suffit.

    Prometteur. Si vous le pouvez, essayez-le.

Aaron Digulla
la source
Démonstration de Pivot essayée "Évier de cuisine", après avoir ouvert certains groupes, il continue de manger tout le CPU. Si c'est à cause de la conception de Pivot, alors je ne le veux certainement pas dans mes projets.
Nom d'affichage
On dirait que j'ai trouvé la source du problème et il est résolu dans les versions ultérieures: apache-pivot-users.399431.n3.nabble.com/…
Nom d'affichage
2
JavaFX 8 (pour Java 8 et supérieur) possède un widget TreeTableView. Cependant, JavaFX 2.2 (pour Java 7) ne le fait pas, ainsi que les dialgos d'erreur et d'informations standard: voir stackoverflow.com/a/12760202/105137 . La bibliothèque de widgets ControlsFX est également disponible pour Java 8 uniquement: fxexperience.com/controlsfx
kostmo
12

SWT en lui-même est assez bas niveau, et il utilise les widgets natifs de la plateforme via JNI. Il n'est pas du tout lié à Swing et AWT. L' IDE Eclipse et toutes les applications client enrichi basées sur Eclipse, comme le client Vuze BitTorrent , sont construits à l'aide de 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 près de 5 ans maintenant, donc je suis clairement biaisé. Cependant, j'ai également une vaste expérience dans le travail avec SWT et la boîte à outils JFace UI, qui est construit au-dessus. 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 fonctionnelle assez rapidement, tant qu'elle est de type IDE (avec des tables, des arbres, des contrôles natifs, etc.). Bien sûr, vous pouvez également intégrer vos commandes personnalisées, mais cela demande un effort supplémentaire.

Zsolt Török
la source
À votre avis, un composant avancé comme un TreeTable avec tri et filtrage des colonnes serait-il un gros problème avec SWT + JFace?
netbrain
@netbrain: Je l'ai fait plusieurs fois, c'est assez simple avec JFace. C'est ce que je voulais dire par une interface "de type IDE", peut-être pas le meilleur choix de mots.
Zsolt Török
9

Je voudrais suggérer un autre framework: 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 à l'aide de Java2D, minimisant ainsi l'impact des héritages (IMO, gonflés) de Swing et AWT.

Augustus Thoo
la source
1
J'avais l'impression que Netbrain posait des questions sur les applications de bureau. Pour les cadres RIA, considérez également GWT et Vaadin. Ces frameworks vous permettent d'écrire en Java, de compiler et d'obtenir du JavaScript qui fonctionne très bien sur tous les navigateurs Web courants.
Costis Aivalis
le pivot ne peut-il pas être appliqué pour les applications de bureau?
netbrain
C'est peut-être une question de définition, mais les cadres RIA sont essentiellement conçus pour fonctionner dans les navigateurs.
Costis Aivalis
2
@netbrain: Oui, vous pouvez exécuter Pivot en tant qu'application de bureau (JFrame) ou applet (JApplet).
Augustus Thoo,
9

Swing + SwingX + Miglayout est ma combinaison de choix. Miglayout est tellement plus simple que Swings ne percevait 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.

méthode d'aide
la source
8

Une autre option consiste à utiliser Qt Jambi . Il a presque toute la grandeur de Qt (de nombreux composants, une 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 .

nimcap
la source
5

Mon avis personnel: optez pour Swing avec la plateforme 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 qui va être grande) sans une bonne plate-forme basée sur le cadre d'interface utilisateur sous-jacent.

L'autre option est SWT avec Eclipse 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 abrupte pour la plate-forme NetBeans (bien que je suppose que cela soit également vrai pour Eclipse) mais il y a de bons livres autour desquels je recommanderais fortement.

un cheval sans nom
la source
1
Notez que SwingX est des composants (AFAIU) qui sont des extensions ou des compositions de composants Swing existants. JGoodies OTOH concerne les PLAF et les mises en page. Mais comme vous l'avez dit, l'un ou l'autre s'intégrera parfaitement à Swing.
Andrew Thompson,
1
+1 Basez votre développement sur Swing. Swing est construit au-dessus d'AWT et comprend des composants légers qui se ressemblent et se comportent de la même manière sur toutes les plates-formes, vous ne devez donc jamais utiliser directement les composants AWT. Il existe un grand nombre d'excellents Beans que vous pouvez facilement ajouter à votre interface graphique de développement, comme ie toedter.com JCalendar.
Costis Aivalis
1
@Andrew en plus de PLAF et de la mise en page, JGoodies offre plus: liaison de beans (pour le modèle de présentation), validation et un framework "JSR-296 like" (celui-ci est commercial).
jfpoilpret
3

vous avez oublié pour Java Desktop Aplication basé sur JSR296 en tant que Swing Framework intégré dans NetBeans

à l'exception d'AWT et de JavaFX, tous vos cadres décrits sont basés sur Swing, si vous commencez par Swing, vous comprendrez (clairement) tous ces Swing (cadres basés sur)

ATW, SWT (Eclipse), Java Desktop Aplication (Netbeans), SwingX, JGoodies

tous les frameworks là-bas (je ne sais pas quelque chose de plus sur JGoodies) incl. JavaFX n'a ​​pas longtemps progressé, de nombreux cadres basés sur Swing sont arrêtés, sinon sans la dernière version

juste mon avis - le meilleur d'entre eux est SwingX, mais nécessitait une connaissance approfondie de Swing,

Look and Feel pour les cadres basés sur Swing

mKorbel
la source
une partie d'entre eux sur les composants AWT, une partie sur Swing JCompoentns, mais entre AWT et Swing est la différence avec les méthodes implémentées, accessibles et héritées, par exemple Swing JComponents directement (API) implémente de nombreuses méthodes
héritées
Le JSR296 est mort. Il n'est plus "maintenu" et son support a été supprimé de NetBeans. (Et cela n'a jamais été un très bon cadre pour commencer)
a_horse_with_no_name
@a_horse_with_no_name ce droit with same progressdans SWT, SwingX, nouveau propriétaire, nouveaux maniers
mKorbel
1
SWT, développé par IBM, n'est pas basé sur Swing, c'est / était une technologie concurrente. Swing utilise AWT. JavaFX n'est pas non plus basé sur Swing. Il s'agit d'un cadre entièrement nouveau. Certains l'appellent le successeur de Swing, mais il est encore trop immature pour appeler cette bataille. Je prends exactement la même décision en ce moment, et Swing est mon candidat, simplement parce que c'est l'option la plus mature, mais réaliste disponible.
Gordon
1
SwingX est une extension de Swing (c'est pourquoi il nécessite des connaissances en Swing), en fait, certaines fonctionnalités de SwingX ont été intégrées à Swing lui-même.
Gordon
3

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

sbrattla
la source
Bon à savoir! JIDE a donc créé ses propres composants basés sur Swing ...
netbrain
Oui, JIDE a réalisé pas mal de composants couvrant des grilles, des arbres, des tableaux, des graphiques et autres. Comme je l'ai dit, ce n'est pas gratuit, mais étant donné le temps qu'il faudrait pour faire ces choses vous-même, vous feriez probablement mieux d'utiliser quelque chose qui est déjà fait. De plus, pour autant que je sache, JIDE est flexible en ce qui concerne la possibilité pour les projets open source d'utiliser leurs composants en échange d'un lien vers leur site Web ou d'un logo dans la boîte de dialogue «À propos».
sbrattla
3

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

De plus, si vous allez commencer à développer une énorme application de bureau, vous aurez certainement besoin d'un framework. D'autres ont souligné le cadre des netbeans. Je ne l'aimais pas beaucoup, alors j'en ai é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 ouverture de session simple en fait ..

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

sethu
la source