| « La star GWT | J'ai aussi succombé à FireFox » |
Eclipse RCP vs Swing
En ce moment, il ne se passe pas un jour où je n'entends parler d'Eclipse RCP. La première fois que j'ai découvert ce Framework, c'était il y a bien longtemps, les lecteurs de DNG s'en souviennent peut-être. A l'époque, RCP n'existait pas vraiment sous cette forme. Les API étaient moins consistantes et le design laissait plutôt à désirer.
4 ans après, je dois avouer que je n'ai toujours pas été convaincu par cette API que je trouve complexe même si visuellement très aboutie (il suffit d’utiliser Eclipse). En fait, le problème avec RCP n’est pas tant technique, c’est plutôt son positionnement qui me laisse un peu perplexe.
A l’origine, RCP et notamment SWT/JFace ont été créés pour pallier aux problèmes récurrents de Swing (performances, pauvreté des composants). RCP s'appuie sur les widgets natifs du système d'exploitation (qui dit code natif, dit performance) là où Swing redéfinit ses rendering via une architecture à base de Toolkit.
Or aujourd'hui, Swing a changé. Swing est performant. Pour s'en convaincre, il suffit de tester les dernières versions de "feu" JBuilder ou simplement de lancer Eclipse en mode Swing avec le plugin EoS(terrible!). Entre le JDK 1.3 et le JDK 1.6, il y a eu de sacrés progrès (le JDK 1.7, en béta, est encore plus criant).
Côté design, ce Framework est d'une redoutable efficacité. La personnalisation y est poussée jusqu'aux limites extrêmes. Le multi-Look&Feel (appelé aussi Plaf pour Pluggable L&F) satisfait aujourd'hui quasiment toutes les envies. Et l'outillage qui faisait tant défaut il y a encore quelques mois est désormais opérationnel et productif.
Mon atelier de développement préféré du moment en Swing est composé de Eclipse + JFormDesigner + JIDE. JFormDesigner est un outil Java très en vogue, il permet à la manière de VS.NET de concevoir une application graphique via simple glisser/déplacer avec un mode preview multi-skins et une palette de composants personnalisables.
JFormDesigner s'utilise en mode génération de code (vous n'êtes pas dépendant de l'outil) ou à partir de fichiers de description XML à l'exécution (nécessite un Runtime). Son architecture ouverte lui permet d'utiliser tout type de Layout Manager (le fardeau des outils de conception Swing WYSIWYG) dont le célèbre JGoodies Forms Layout ou celui de Matisse (dans une prochaine version), GroupLayout.
Associé à JFormDesigner, JIDE (merci à Florent pour m'avoir fait découvert ce Framework) est la cerise sur le gâteau, regardez simplement cette démo et vous comprendrez à quel point Swing a changé.
Seule ombre au tableau mais elle est de taille (surtout comparé à VS.NET) : le binding. On s'aperçoit que lorsqu'on conçoit une application Swing graphiquement, l'association aux données reste encore malheureusement trop manuelle et le mode bi-directionnel inexistant (possibilité de changer les propriétés d'un bean avec synchronisation du contrôle graphique associé). Sun y travaille et tout le monde attend patiemment la JSR 295.
Malgré tout, Swing n'a pas à rougir face à RCP. Bien au contraire, l'avenir joue en sa faveur, non seulement SwingLabs trace les contours de sa roadmap mais surtout Swing fait partie intégrante du J2SE. Pas de librairie tierce à télécharger (utile dans le cas de Smart Client Java Web Start) et une communauté largement supérieure à celle d'Eclipse RCP (quoi qu'on en dise). JavaDesktop.org (une perle) montre à quel point cette communauté est dynamique et produit jour après jour des applications de plus en plus complexes.
9 commentaires
Je comprends ton point de vue sur Swing vs SWT, il est vrai que Swing s'améliore mais, à mon avis, l'engouement pour Eclipse RCP ne se résume pas à SWT. L'apport fondamental d'Eclipse RCP est la possibilité de réutiliser, pour une application cliente, l'aspect modulaire d'Eclipse (notion de plug-ins, framework OSGi et surtout notion de point d'extension).
D'autre part, concernant l'aspect graphique, ce n'est pas seulement SWT qui est repris dans les applications Eclipse RCP mais toute la notion de 'Workbench' d'Eclipse (Perspective, vue, éditeur, page de préférences, wizard, ...).
Donc je pense que le débat n'est pas 'Eclipse RCP vs Swing' mais devrait plutôt être 'Eclipse RCP vs NetBeans RCP vs ?'.
L'avenir de Swing passe par le Swing Application Framework (JSR 296) et l'intégration de binding (JSR 295 - Beans Binding). Un proto est visible ici: http://blogs.sun.com/alexismp/entry/swing_et_plate_forme_rcp1
Le JDK 7 n'est pas encore en beta (on en est à même assez loin :-)
Mais vos commentaires sont là pour apporter les clarifications d'usage...
Pour tout avouer je n'ai rien vu dans cette spec qui me conforte dans l'idée que ça va me permettre d'économiser du temps de développement. Au contraire, en essayant de structurer les IHM avec des Actions, des Task et des sessions on ajoute de la complexité sans pour autant réduire l'effet plat de spaguettis.
Il faudra attendre la version finale et les premières implémentations mais pour moi le seul chaînon manquant de Swing aujourd'hui reste le binding bidirectionnel et la JSR 295.
L'aspect modulaire et OSGI est loin de représenter le cas nominal d'une application Swing.
A part ça, s'il y a effectivement eu une certaine amélioration au niveau de Swing (surtout sur les perfs, les API sont vraiment datées et incohérentes), c'est sans doutes grâce à la compétition de SWT !
Je trouve toujours effarant la piètre qualité de Swing après toutes ces années d'existence. Les évolutions sont tout de même très rares à chaque release de JDK (un petit gestionnaire de focus par ci, un petit look and feel par là; incroyable qu'il ait fallu attendre un Java 6 pour avoir une implémentation de JTable triable et filtrable intégrée directement dans le JRE).
Quand on voit ce qu'a mis en place Microsoft pour son prochain .Net + Vista au niveau interface, on se dit que la priorité de Sun n'a vraiment pas été l'interface depuis la création de Swing (genre Java 1.2, et c'était utilisable un peu avant). Heureusement que ça a bien bougé dans le monde JEE (mais les initiatives ne viennet pas de Sun et rarement du JCP).
tout API graphique a des points fort et des points faible.
vous avez déjas sité les points forts de swing et les points faibles de SWT .
alors laisse moi te dire ce que t'a pas mentionner
je crois que SWT/JFace s'addresse a un domaine différent un peu de SWING.
ce que dit SWING ,personnalisation a l'extréme mais aussi difficulté a faire des chose simple
ce a quoi s'addresse SWT/JFace
étre cappable de dévelpper une interface standard en peu de temps et suivre des schéma de dévelloppement bien connu est extensible.
je pense pas que un des deux doit disparitre pour laisser la place a un autre mais il sont tout dissponible pour s'addresser a des besoin différents
d'ailleurs il est possible de combiner les deux api dans la même fenétre ;)