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

il y a beaucoup de cadres gui pour java, mais qu'est-ce qui est reconnu comme le cadre de choix d'aujourd'hui?

ce qui suit est ma compréhension des différents cadres, s'il vous plaît corriger moi si je me trompe. Il s'agit d'un ensemble de questions très mal définies, mais je pense toujours qu'il est précieux pour quiconque pense à créer de riches applications gui.


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 applications gui plus petites qui ne nécessitent pas d'interfaces utilisateur riches. Cela peut convenir parfaitement que c'est un éprouvés et cadre.


Swing

basé sur AWT as indiqué précédemment. Dans son enfance, il a été considéré comme lent et buggy et a causé IBM de 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 sont toujours en manque dans certains domaines. Un exemple est qu'il n'y a pas de Composant TreeTable complet capable de faire le tri et le filtrage/la recherche.


"1519280920

créé par IBM pour Eclipse, ils semblaient penser que Swing n'était pas adapté pour Eclipse à l'époque. Par lui-même est assez bas niveau, et il utilise les widgets natifs de la plate-forme par le biais de JNI. Il n'est pas du tout lié à Swing et AWT. Leur API est cependant quelque peu clunky et pas intuitif. Ils ont des composants avancés comme un TreeTable. (mais je ne pense pas qu'ils soutiennent le tri et le filtrage hors de la boîte). SWT utilise des fixations natives (via JNI?) et l'engouement 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.) Ont un très bel ensemble de composants, comme par exemple TreeTable. Mais le TreeTable ne supporte pas le filtrage et le tri dans la mesure où je sais. Il supporte cependant la recherche avec mise en évidence.

noter que SwingX est un composant (AFAIU) qui est une extension ou compositions des éléments oscillants existants


JGoodies

un cadre dont je ne sais rien... Qu'est-ce que c'est les forces et les faiblesses? C'est quoi Jgoody à part le reste?

JGoodies OTOH est sur les plans et layouts.


JavaFX

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


Apache Pivot

il rend L'UI en utilisant Java2D, minimisant ainsi l'impact des héritages (IMO, gonflés) de Swing et AWT. (@Augustus Thoo)

il semble que l'accent principal soit mis sur RIA (Rich internet applications), mais il semble qu'il peut également être appliqué aux applications bureautiques. Et comme un commentaire personnel, l'air très intéressant! J'aime surtout que ce soit un projet apache.

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


Qt Jambi

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

http://qt-jambi.org /


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

dire 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 considéré comme déprécié et lequel devrait être reconnu comme cadre d'un avenir lointain?

Qu'est-ce que le cadre standard actuel et quels outils utilisez-vous pour créer des applications gui java?


, mais je vais quand même essayer:

C# / .Net est considéré comme ayant un très bon ensemble de composants faciles à utiliser qui peuvent être fléchis dans toutes les directions possibles. Et après avoir examiné différents cadres java dans une certaine mesure, Je ne peux pas sembler 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é leurs composants gui à un niveau beaucoup plus bas, et il est possible d'écrire tous ces composants avancés que im recherche, mais vous devez faire beaucoup, sinon tout le travail vous-même?

229
demandé sur netbrain 2011-09-09 12:06:36

9 réponses

Arbre de décision:

  1. les cadres comme Qt et SWT ont besoin de DLLs natifs. Vous devez donc vous demander: toutes les plateformes nécessaires sont-elles prises en charge? Pouvez-vous empaqueter les DLLs natifs avec votre application?

    voir ici, comment faire ceci pour SWT .

    si vous avez le choix ici, vous devriez préférer Qt au SWT. Qt a été développé par des personnes qui comprennent L'UI et le bureau tandis que SWT a 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 vous manque beaucoup de composants majeurs de L'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 caractéristique dont vous avez besoin, le cadre est quelque peu hostile à son extension. Par exemple, vous ne pouvez pas étendre n'importe quelle classe dans ELLE (les classes ne sont pas finales, ils jettent juste des exceptions quand le paquet 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 Java pure et native, cela vous laisse avec le reste. Commençons par le SWING, Swing, SwingX - le Swing way.

    AWT est périmé. Le Swing est dépassé (peut-être moins, mais peu de travail a été fait sur le Swing au cours des 10 dernières années). Vous pourriez argumenter que Swing était bon pour commencer, mais nous savons tous que le code pourriture. Et c'est particulièrement vrai pour l'Isu aujourd'hui.

    qui vous laisse avec SwingX. Après une période plus longue de progrès lents, développement a repris . Le principal inconvénient du Swing est qu'il est accroché à de vieilles idées qui saignent un peu le bord il y a 15 ans mais qui se sentent "maladroit" aujourd'hui. Par exemple, les vues de table prennent en charge le filtrage et le tri, mais vous devez tout de même configurer cela. Tu vas devoir écrire beaucoup de code de la chaudière. juste pour avoir une bonne UI qui se sent moderne.

    theming est un autre point faible. À compter d'aujourd'hui, il ya beaucoup de thèmes autour de. Voir ici pour un top 10 . Mais certains sont lents, certains sont buggés, certains sont incomplets. Je déteste quand j'écris un UI 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 sur le dessus de Swing, comme SwingX. Il essaie de rendre Swing plus agréable à utiliser. Le site web de l'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 . Non, pas de tutoriels utiles du tout.

    Je ne me sens pas en confiance avec un cadre D'interface utilisateur qui essaie si fort de cacher la documentation aux nouveaux fans potentiels. Cela ne signifie pas JGoodies est mauvais; je n'ai juste pas pu trouver quelque chose de bon à dire à ce sujet, mais que c'est joli.

  4. JavaFX. Grand, élégant. Le soutien est là, mais je pense que c'est plus un jouet brillant qu'un véritable framework d'INTERFACE. Ce sentiment trouve son origine dans l'absence de composantes D'interface utilisateur complexes comme les tables d'arbre. Il existe un composant basé sur webkit pour afficher le code HTML .

    quand il a été introduit, ma première pensée était " cinq ans trop tard."Si votre objectif est une application agréable pour les téléphones ou les sites web, bon. Si votre objectif est l'application professionnelle de bureau, Assurez-vous qu'il fournit ce dont vous avez besoin.

  5. Pivot. Première fois que j'ai entendu à ce sujet. C'est essentiellement un nouveau cadre D'interface basé sur Java2D. J'ai essayé hier. Pas de Swing, juste un tout petit peu de AWT ( new Font(...) ).

    ma première impression a été une bonne. Il y a une documentation complète qui vous aide à commencer. La plupart des exemples viennent avec des démos en direct (Note: 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 sont consacrés au code qu'à la documentation. En regardant les Docs de Pivot, beaucoup d'effort a dû aller dans le code. Notez qu'il y a actuellement un bug 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 de résoudre rapidement en regardant un exemple. Je manque une référence de tous les styles que chaque composante soutient, cependant.

    comme avec JavaFX, il manque des composants de niveau supérieur comme un composant de table d'arbre ( PIVOT-306 ). Je n'ai pas essayer le chargement paresseux avec la vue du tableau. Mon impression est que, si le le modèle sous-jacent utilise le chargement paresseux, alors c'est assez.

    prometteur. Si vous le pouvez, essayez-les.

80
répondu Aaron Digulla 2017-05-23 12:10:54

SWT par lui-même est assez bas niveau, et il utilise les widgets natifs de la plate-forme à travers JNI. Il n'est pas du tout lié à Swing et AWT. L'IDE Eclipse et toutes les Applications client riches basées sur Eclipse, comme le client Vuze BitTorrent , sont construites en utilisant SWT. De plus, si vous développez des plugins Eclipse, vous utiliserez généralement SWT.

J'ai développé des applications basées sur Eclipse et plugins depuis presque 5 ans maintenant, donc je suis clairement partial. Cependant, j'ai aussi une vaste expérience de travail avec SWT et le JFace UI toolkit , qui est construit sur le dessus de celui-ci. J'ai trouvé JFace très riche et puissant; dans certains cas, il pourrait même être la principale raison pour choisir SWT. Il vous permet de créer une interface utilisateur qui fonctionne assez rapidement, à condition qu'elle ressemble à un IDE (avec des tables, des arbres, des commandes natives, etc.). Bien sûr, vous pouvez intégrer des contrôles personnalisés, mais ça demande un effort supplémentaire.

13
répondu Zsolt Török 2011-09-09 12:50:48

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

j'ai essayé brièvement et j'ai été impressionné par ce qu'il peut offrir comme cadre RIA (riche Application Internet) ala Flash.

il rend L'UI en utilisant Java2D, minimisant ainsi l'impact DE (IMO, ballonnement) héritages de Swing et AWT.

11
répondu Augustus Thoo 2011-09-09 08:20:53

Swing + SwingX + Miglayout est ma combinaison de choix. Miglayout est tellement plus simple que les oscillations perçu 200 managers de layout différents et beaucoup plus puissant. En outre, il vous fournit la capacité de "déboguer" vos layouts, ce qui est particulièrement pratique lors de la création de layouts complexes.

9
répondu helpermethod 2011-09-09 14:15:09

une autre option est d'utiliser Qt Jambi . Il possède 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 pourriez vouloir voir la discussion sur Swing vs. Qt ici .

9
répondu nimcap 2017-05-23 11:33:26

Mon opinion personnelle: Aller pour le Swing en collaboration 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) que 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 qui est construit sur le cadre D'UI sous-jacent.

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

la courbe d'apprentissage est un peu raide pour la plate-forme NetBeans (bien que je suppose que c'est vrai pour Eclipse aussi bien) mais il ya quelques bons livres autour de laquelle je recommande fortement.

5
répondu a_horse_with_no_name 2011-09-09 08:21:41

vous avez oublié pour L'application Java Desktop basée sur JSR296 comme cadre intégré Swing dans NetBeans

sauf AWT et JavaFX sont tous vos cadres décrits sont basés sur Swing, si vous commencez avec Swing alors vous seriez compris (clairement) pour tous ces Swing (Cadres basés)

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

all there frameworks (Je ne sais pas quelque chose de plus à propos de JGoodies) incl. JavaFX n'a pas fait de progrès depuis longtemps, beaucoup de cadres basés sur Swing sont arrêtés, si ce n'est pas alors sans la plus récente version

juste mon avis - le meilleur d'eux est SwingX, mais nécessaires les plus profondes connaissances sur Swing,

Look and Feel pour le Swing de Base des Cadres

4
répondu mKorbel 2017-05-23 12:34:59

J'ai été très heureux avec Swing pour les applications de bureau dans lesquelles j'ai été impliqué. Cependant, je partage votre point de vue sur Swing ne pas offrir des composants avancés. Ce que j'ai fait dans ces affaires, c'est d'aller pour 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 TreeTable filtrable.

3
répondu sbrattla 2011-09-09 08:45:34

je dirais Swing. Pour la mise en page, j'utiliserais la mise en page JGoodies form. Cela vaut la peine d'étudier le livre blanc sur la disposition de forme 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 cadre. D'autres ont souligné le cadre de netbeans. Je n'ai pas, comme beaucoup comme l'écrit un nouveau que nous utilisons aujourd'hui dans mon entreprise. Je l'ai mis sur sourceforge, mais na pas trouver le temps de document de beaucoup. Voici le lien pour parcourir le code:

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

le showcase devrait vous montrer comment faire une simple connexion en fait..

dites-moi si vous avez des questions, je peux vous aider.

3
répondu sethu 2011-09-09 09:45:43