Les frameworks Java GUI. Que choisir? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?

Il y a pas mal de frameworks d’interface graphique pour Java, mais qu’est-ce qui est reconnu comme cadre de choix aujourd’hui?

Voici ce que je comprends des différents frameworks, corrigez-moi si je me trompe. Ceci est un ensemble de questions très vague, mais je pense toujours que c’est utile pour quiconque pense à créer des applications gui riches.


AWT

Fondement 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. Toutefois, pour les applications d’interface graphique plus petites, les interfaces utilisateur riches ne sont pas nécessaires. 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 bogué, ce qui a amené IBM à créer SWT pour Eclipse. Cependant, avec Java 5 (ou 6?), Swing est devenu le cadre de choix pour la création de nouvelles applications. Swing a beaucoup de composants riches, mais il manque encore dans certains domaines. Un exemple est qu’il n’y a pas de composant TreeTable complet qui peut faire du sorting et du filtrage / recherche.


SWT

Créés par IBM pour Eclipse, ils semblaient penser que Swing n’était pas adapté à Eclipse à l’époque. Par lui-même, le niveau est assez bas 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 un peu maladroite et pas intuitive. Ils ont des composants avancés comme TreeTable. (mais je ne pense pas qu’ils supportent le sorting et le filtrage). SWT utilise des liaisons natives (via JNI?) Et la répulsion sur Internet est que ce framework ne doit pas être utilisé dans les projets actuels. (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 la TreeTable ne supporte pas le filtrage et le sorting 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 sais rien … Quels sont ses points forts et ses points faibles? Quels sont les Jgoodies mis à part le rest?

JGoodies OTOH concerne les PLAF et les mises en page.


JavaFX

Le dernier produit phare de Java / Oracle. promettant d’être la norme 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 inheritances (OMI, gonflés) de Swing et AWT. (@Augustus Thoo)

Son principal objective semble être RIA (Rich Internet Applications), mais il semble que cela puisse également être appliqué aux applications de bureau. Et comme commentaire personnel, ça a l’air très intéressant! Surtout que c’est un projet Apache.

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


Qt Jambi

Un wrapper Java vers la bibliothèque native qt é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 ce que je demande:

Supposons que je veuille créer une application de bureau en Java qui implique beaucoup de composants avancés, que dois-je choisir? Et pourquoi?

Lequel de ces frameworks devrait être reconnu comme obsolète et lequel devrait être reconnu comme les frameworks 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?


Je pourrais regretter de l’avoir demandé, mais essayez de toute façon:

On dit que C # /. Net possède un très bon ensemble de composants faciles à utiliser qui peuvent être pliés dans toutes les directions possibles. Et après avoir étudié différents frameworks Java, je ne peux 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) ne possède-t-il pas le même ensemble de composants graphiques?

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 vous recherchez, mais vous devez faire beaucoup sinon tout le travail vous-même?

    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 sockets en charge? Pouvez-vous conditionner les DLL natives avec votre application?

      Voir ici, comment faire cela pour SWT .

      Si vous avez le choix, 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 performance pour Java 1.4 qu’un framework d’interface utilisateur. Sans JFace, il manque de nombreux composants d’interface utilisateur ou des fonctionnalités très importantes des composants de l’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 (les classes ne sont pas définitives, elles this.getClass() simplement des exceptions lorsque le package de this.getClass() n’est pas org.eclipse.swt et que vous ne pouvez pas append de nouvelles classes dans ce paquet parce qu’il est signé).

    2. Si vous avez besoin d’une solution Java native native, cela vous laisse le rest. Commençons par AWT, Swing, SwingX – la façon Swing.

      AWT est obsolète. Le swing est dépassé (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 pour commencer, mais nous soaps tous que le code est mauvais. Et c’est particulièrement vrai pour les interfaces utilisateur aujourd’hui.

      Cela vous laisse avec SwingX. Après une longue période de lenteur, le développement a repris . L’inconvénient majeur de Swing réside dans le fait qu’il est suspendu à de vieilles idées qui ont fait fureur 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 sorting mais vous devez toujours le configurer. Vous devrez écrire beaucoup de code de plaque de chaudière pour obtenir une interface utilisateur décente qui soit moderne.

      Un autre domaine 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, d’autres buggés, d’autres incomplets. Je déteste quand j’écris une interface utilisateur et les utilisateurs se plaignent que quelque chose ne fonctionne pas pour eux car 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. Regardons le tutoriel … hm … toujours à la recherche … accroche-toi. Il semble qu’il n’y ait aucune documentation sur le site Web du tout. Google à la rescousse . Non, pas de tutoriels utiles du tout.

      Je ne me sens pas en confiance avec une interface utilisateur qui essaie de cacher la documentation à de nouveaux fans potentiels. Cela ne signifie pas que JGoodies est mauvais; Je ne pouvais pas trouver quelque chose 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 shiny qu’un cadre d’interface utilisateur sérieux. Ce sentiment s’explique par l’absence de composants complexes tels que les tables d’arbre. Il existe un composant Webkit pour afficher le code HTML .

      Quand il a été introduit, ma première pensée était “cinq ans trop tard”. Si votre objective est une belle application pour les téléphones ou les sites Web, bon. Si votre objective est une application de bureau professionnelle, assurez-vous qu’elle répond à vos besoins.

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

      Ma première impression a été agréable. Il existe une documentation complète qui vous aide à démarrer. La plupart des exemples sont fournis avec des démonstrations en direct (Remarque: Java doit être activé dans votre navigateur Web; il s’agit d’un risque de sécurité ) dans la page Web. Vous pouvez donc voir le code et l’application résultante côte à côte.

      Dans mon expérience, plus d’effort est mis dans le code que dans la documentation. En regardant les documents Pivot, beaucoup d’efforts ont dû être déployés dans le code. Notez qu’il existe actuellement un bogue qui empêche certains des exemples de fonctionner ( PIVOT-858 ) dans votre navigateur.

      Ma deuxième impression de Pivot est qu’il est facile à utiliser. Lorsque j’ai rencontré 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 que chaque composant prend en charge.

      Comme pour 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 un chargement paresseux, cela suffit.

      Prometteur. Si vous le pouvez, essayez-le.

    SWT en lui-même est de 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, telles que le client Vuze BitTorrent , sont créées à l’aide de SWT. De plus, si vous développez des plug-ins Eclipse, vous utiliserez généralement SWT.
    Je développe des applications et des plug-ins basés sur Eclipse depuis presque 5 ans maintenant, donc je suis clairement partial. Cependant, j’ai également une grande expérience dans le travail avec SWT et la boîte à outils JFace UI , qui est construite dessus. J’ai trouvé JFace très riche et puissant; dans certains cas, cela pourrait même être la raison principale 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 demande un effort supplémentaire.

    Je voudrais suggérer un autre cadre: Apache Pivot http://pivot.apache.org/ .

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

    Il rend l’interface utilisateur en utilisant Java2D, minimisant ainsi l’impact des inheritances (OMI, gonflés) de Swing et AWT.

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

    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 de C ++. Je l’ai utilisé il y a 3 ou 4 ans pour un petit projet, même alors, il était presque mature.

    Vous pourriez vouloir voir la discussion à propos de Swing vs. Qt ici .

    Mon avis personnel: optez pour 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 lancerais pas une grande application de bureau (ou une application de grande taille) sans une bonne plate-forme basée sur la structure sous-jacente de l’interface utilisateur.

    L’autre option est SWT avec le RCP Eclipse, 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 quelques bons livres à recommander.

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

    En excluant AWT et JavaFX, tous vos frameworks décrits sont basés sur Swing, si vous commencez avec Swing, vous comprendrez clairement (clairement) tous ces Swing (Based Frameworks).

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

    tous les frameworks (je ne sais pas plus sur JGoodies) incl. JavaFX a peu de temps pour progresser, beaucoup de Frameworks basés sur Swing sont arrêtés, sinon sans version la plus récente

    juste mon sharepoint vue – le meilleur d’entre eux est SwingX, mais nécessitait une connaissance approfondie de Swing,

    Look and Feel pour les frameworks basés sur Swing

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

    J’irais avec Swing. Pour la mise en page, j’utiliserais la mise en page de formulaires 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 application de bureau énorme, vous aurez certainement besoin d’un framework. D’autres ont signalé le framework netbeans. Je ne l’aimais pas tellement j’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. Voici le lien pour parcourir le code:

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

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

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