web-dev-qa-db-fra.com

Java frameworks d'interface graphique. Que choisir? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?

Il existe de nombreux frameworks d'interface graphique pour Java, mais qu'est-ce qui est reconnu comme framework de choix aujourd'hui?

Ce qui suit est ma compréhension des différents cadres, veuillez me corriger si je me trompe. C’est un ensemble de questions défini de manière très vague, mais je pense toujours que c’est utile pour quiconque songe à créer des applications riches en interface graphique.


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


Swing

Basé sur AWT comme indiqué précédemment. A ses débuts, il était considéré comme lent et problématique et a amené IBM à créer SWT pour Eclipse. Cependant, avec Java 5 (ou 6?), Swing est devenu la structure de choix pour la création de nouvelles applications. Swing a beaucoup de composants riches mais manque toujours dans certaines régions. Un exemple est qu’il n’existe pas de composant TreeTable complet capable de trier et filtrer/rechercher.


SWT

Créés par IBM pour Eclipse, ils semblaient penser que Swing n’était pas adapté à Eclipse à l’époque. En soi, le niveau est assez bas et 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 maladroite et non intuitive. Ils ont certains composants avancés comme une TreeTable. (mais je ne pense pas qu'ils soutiennent le tri et le filtrage hors de la boîte). SWT utilise certaines liaisons natives (par le biais de JNI?) Et le fléau sur Internet est que ce cadre ne doit pas être utilisé dans les projets actuels. (pourquoi pas?)


SwingX

Basé sur Swing, sa mission est de créer de riches composants pour le swing. Encore en développement. (pas très actif cependant.) Avoir un très bel ensemble de composants, comme par exemple TreeTable. Mais la TreeTable ne prend pas en charge le filtrage et le tri pour autant que je sache. Il prend toutefois 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 Jgoodies des autres?

JGoodies OTOH concerne les PLAF et les layouts.


JavaFX

Le dernier produit phare de Java/Oracle. promettant d’être la norme de fait dans le développement d’applications bureautiques ou Web riches.


Apache Pivot

Il restitue 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 la RIA (applications Internet riches), mais il semble que cela puisse également s'appliquer 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 dans la bibliothèque qt native qui est écrite en c/c ++. Très puissant, largement utilisé et accepté. A beaucoup de composants d'interface graphique et une API facile à utiliser.

http://qt-jambi.org/


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

Supposons que je veuille créer une application de bureau aujourd'hui dans 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 les cadres du futur lointain?

Qu'est-ce qu'un cadre standard de facto et quels outils utilisez-vous pour créer des applications Java gui?


Je regretterai peut-être de vous l'avoir demandé, mais j'essayerai quand même:

On dit que C #/.Net a 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, je ne peux pas sembler dire la même chose de Java. Pourquoi est-ce? Pourquoi Java (qui est le langage de programmation le plus utilisé dans le monde) ne possède-t-il pas le même ensemble de composants d'interface graphique?

Est-ce juste que Java a basé ses composants d'interface graphique à 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 ?

229
netbrain

Arbre de décision:

  1. Les frameworks tels que 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 créer un package pour 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. Il s’agit plus d’un correctif de performances pour Java 1.4 que d’un framework d’interface utilisateur. Sans JFace, il 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 étendre aucune classe dans celle-ci (les classes ne sont pas finales, elles jettent simplement des exceptions lorsque le paquetage de this.getClass() n'est pas org.Eclipse.swt et vous ne pouvez pas ajouter de nouvelles classes dans ce paquet parce qu'il est signé).

  2. Si vous avez besoin d'une solution pure Java native, le reste vous reste. Commençons par AWT, Swing, SwingX - la méthode 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). Vous pourriez dire que Swing était bon au début, mais nous savons tous que le code pourrit. Et c'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 reprend certaines idées anciennes qui saignaient beaucoup, il ya 15 ans, mais qui semblaient "maladroites" aujourd’hui. 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 pour obtenir une interface utilisateur décente et moderne.

    Un autre domaine faible est la thématisation. À ce jour, il y a beaucoup de thèmes autour. Voir ici pour un top 1 . Mais certains sont lents, certains sont buggés, d'autres 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 choisi 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 ... tenez bon. 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 à l'aise avec un framework d'interface utilisateur qui essaie tellement de cacher la documentation à de nouveaux fans potentiels. Cela ne signifie pas que JGoodies est mauvais; Je ne trouvais rien de bon à dire à ce sujet, mais ça avait l'air bien.

  4. JavaFX. Super, stylé. Le support existe, mais j'estime qu'il s'agit davantage d'un jouet brillant que d'un cadre d'interface utilisateur sérieux. Ce sentiment découle de l'absence de composants d'interface utilisateur complexes tels que des tables d'arborescence. Il existe un composant basé sur un kit Web pour afficher le code HTML .

    Lors de son introduction, ma première pensée a été "cinq ans de retard". Si votre objectif est une application Nice pour les téléphones ou les sites Web, tant mieux. Si votre objectif est une application de bureau professionnelle, assurez-vous qu'elle réponde à vos besoins.

  5. Pivot. La première fois que j'en ai entendu parler. C'est fondamentalement un nouveau cadre d'interface utilisateur basé sur Java2D. Alors j'ai essayé hier. No Swing, juste un tout petit peu d'AWT (new Font(...)).

    Ma première impression était une belle. Il existe une documentation complète qui vous aidera à démarrer. La plupart des des exemples sont fournis avec des démos en direct (Remarque: vous devez activer Java dans votre navigateur Web. il s'agit d'un risque de sécurité ) sur 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, le code nécessite plus d'efforts que la documentation. En regardant les documents Pivot, beaucoup d'efforts ont dû être consacrés au code. Notez qu’il existe actuellement un bogue empêchant certains des 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, tels qu'un composant de table d'arborescence ( 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.

80
Aaron Digulla

SWT est en soi assez bas niveau et utilise les widgets natifs de la plate-forme via JNI. Ce n'est pas du tout lié à Swing et AWT. Eclipse IDE et toutes les applications Rich Client basées sur Eclipse, comme le client Vuze BitTorrent , sont générées à 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, alors je suis clairement partial. Cependant, j'ai également une vaste expérience de travail avec SWT et le toolkit JFace UI , qui est construit sur ce dernier. J'ai trouvé JFace 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 rapidement une interface utilisateur fonctionnelle, à condition qu'elle soit de type IDE (avec des tables, des arborescences, des contrôles natifs, etc.). Bien sûr, vous pouvez également intégrer vos contrôles personnalisés, mais cela nécessite un effort supplémentaire.

13
Zsolt Török

Je voudrais suggérer 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 cadre RIA (Rich Internet Application) et ala Flash.

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

11
Augustus Thoo

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 s'il était presque arrivé à maturité.

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

9
nimcap

Swing + SwingX + Miglayout est ma combinaison de choix. Miglayout est tellement plus simple que Swings ne percevait 200 gestionnaires de disposition 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 utile lors de la création de mises en page complexes.

9
helpermethod

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

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

Je ne lancerais pas une application de bureau volumineuse (ou une application volumineuse) sans une bonne plate-forme reposant sur le cadre de l'interface utilisateur sous-jacente.

L'autre option est SWT avec le RCP Eclipse, mais il est plus difficile (bien que 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 le cas pour Eclipse), mais il y a quelques bons livres sur lesquels je recommanderais vivement.

5

vous avez oublié pour Java une application de bureau basée sur JSR296 en tant que cadre Swing intégré à NetBeans

à l'exclusion de AWT et JavaFX, tous les frameworks que vous décrivez sont basés sur Swing, si vous commencez par Swing, vous serez alors compris (clairement) pour tous ces Swing (bases).

ATW, SWT (Eclipse), Java Application de bureau (Netbeans), SwingX, JGoodies

tous les cadres (je ne sais pas plus sur JGoodies) incl. JavaFX n'a ​​pas progressé depuis longtemps, de nombreux 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écessite des connaissances approfondies sur Swing,

Look and Feel pour les frameworks basés sur Swing

4
mKorbel

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

De plus, si vous commencez à développer une énorme application de bureau, vous aurez certainement besoin d'un framework. D'autres ont souligné le cadre 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 simple connexion en fait.

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

3
sethu

Je suis assez satisfait de Swing pour les applications de bureau auxquelles j'ai participé. Cependant, je partage votre point de vue sur Swing qui ne propose pas de composants avancés. Ce que j'ai fait dans ces cas-là, c'est aller chercher JIDE. Ce n'est pas gratuit, mais pas cher non plus et cela vous donne beaucoup plus d'outils à votre actif. Plus précisément, ils offrent une TreeTable filtrable.

3
sbrattla