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.
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é.
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.
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?)
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.
Le dernier fleuron de Java / Oracle. promettant d'être la norme de facto dans le développement d'applications bureautiques ou Web riches.
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
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.
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?
Réponses:
Arbre de décision:
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 pasorg.eclipse.swt
et vous ne pouvez pas ajouter de nouvelles classes dans ce package car il est signé).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.
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.
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.
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.
la source
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.
la source
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.
la source
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.
la source
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 .
la source
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.
la source
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
la source
with same progress
dans SWT, SwingX, nouveau propriétaire, nouveaux maniersJ'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.
la source
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.
la source