Nous avons passé toute la journée (quasiment) avec Chet Haase, Romain Guy et Richard Bair à les écouter parler de Swing et des interfaces utilisateur riches, voire ultra-riche.Je dois dire que c’était impressionnant de voir ce qu’on est capable de faire avec Java ces jours-ci. Cela n’a pas toujours été le cas, ou en tout cas cela n’a jamais été aussi facile de faire de belles choses. La nouvelle version 6 de J2SE permet également de faire plein de belles choses en termes d’intégration avec le bureau et l’environnement client en général.Romain Guy a fait une présentation très intéressante sur les principes qui sont bons à garder en tête lorsqu’on conçoit une interface utilisateur. Se rappeler que l’utilisateur est un être humain, qu’il n’a pas forcément l’habitude ni même l’envie d’utiliser l’outil informatique, et qu’il demande au plus profond de son inconscient d’assouvir un certain besoin de synérgie et d’identification avec son outil sont autant de bons conseils de la part de ce jeune homme qui en tout cas sait faire de belles choses au niveau interface.l a d’ailleurs pris quelques exemples de ce qu’il ne faut pas faire (tirées toutes, je pense des outils Microsoft et en particulier de Word), et des exemples d’excellentes interfaces, simples et intuitives (tirées exclusivement du monde Mac, bien entendu). Un livre qu’il a conseillé c’est « Designing Interfaces » d’une certaine Jenifer Tidwell. Voici quelques points qu’elle évoque dans cet ouvrage :
-
- Safe exploration – L’utilisateur a le droit d’aller explorer l’application et de « cliquer partout » sans se faire jeter et sans tout casse. En gros c’est ça…
-
- Instant gratification – L’utilisateur veut que ça s’affiche tout de suite ou en tout cas que l’ordinateur donne l’impression d’obéir immédiatement. L’utilisateur moyen est extrêmement impatient.
-
- Satisficing – C’est un terme inventé qui signifie qu’il ne faut pas alourdir inutilement l’application avec des centaines d’options que 99% des utilisateurs ne vont jamais utiliser. Il a pris comme contre exemple de cette règle le fenêtre Outils-Options de Microsoft Word qui est absolument imbuvable.
-
- Changes in midstream – C’est le concept du bouton « Retour » ou « Défaire » que l’on trouve dans un grand nombre d’applications aujourd’hui, et l’utilisateur commence à s’y attendre. Il veut pouvoir changer d’avis en cours de route ou tout annuler et recommencer plus tard.
-
- Deferred choices – Parfois l’utilisateur ne veut pas prendre une décision tout de suite. Il veut ouvrir l’application et travailler. C’est sympa de lui proposer dans ce cas un bouton « Me demander plus tard »…
-
- Spatial memory – L’être humain a une mémoire spatiale/visuelle bien plus développé que la mémoire des termes, surtout des termes informatiques qu’il ne comprend pas. C’est pourquoi il faut respecter l’emplacement des fonctionalités et des raccourcis. Romain a pris comme exemple un truc dont sur lequel j’ai toujours râlé pour la même raison : les menus « dynamiques » dans Microsoft Office >= 2000. C’est vrai que c’est cool de pouvoir réarranger dynamiquement les éléments d’un menu et ça devait être sympa à programmer, mais du côté expérience utilisateur c’est un cauchemar total. L’utilisateur est habitué à ce que Edition-Couper soit toujours au même niveau dans le second menu. Si on lui change la position, il ne s’y retrouve plus…
D’autres sujets qui ont été évoqués sont les suivants :
-
- Alignement – choisir un mode d’alignement des libellés et des composants de saisie et le respecter dans tout l’application.
-
- Navigation – le concept de « bread-crumbs » est sympa dans certains contextes pour voir le chemin parcouru et éventuellement rebrousser chemin…
-
- Boîtes de dialogue – ne pas poser des questions trop compliquées ou ambiguës. L’utilisateur est sûr de se planter. Un exemple qu’il n’a pas cité mais qui m’est venu à l’esprit tout de suite c’est le message d’avertissement qui apparaît sous Windows 95 et 98 lorsqu’un lecteur connecté permanent n’a pas pu être restauré. Le message d’avertissement est tellement intimidant pour l’utilisateur lambda qu’il clique invariablement sur « Non ». En fait, on lui demande simplement s’il veut réessayer de connecter le lecteur au prochain redémarrage, une question débile qui ne devrait pas être posée d’ailleurs…
-
- Boîtes de monologue – ce sont les boîtes de dialogue qui n’ont qu’une réponse : « OK ». Il ne faut pas en abuser car elles peuvent énerver inutilement l’utilisateur. Il a pris l’exemple de la boîte de monologue de Microsoft Word lorsqu’il a terminé la recherche dans un document.
-
- Saisie de données intelligente – Romain nous a montré certaines applications sur le Mac qui permettent dans les champs qui demandent une date d’être très tolérants quant à la saisie, par exemple, on peut saisir « demain » ou « hier » ou « dans une semaine » et cela est automatiquement converti en date.
SwingX
On a eu droit à la présentation des différents composants supplémentaires proposés par la librairie SwingX. Parmi les plus notables, j’ai retenu :
-
- JXErrorPane – ce composant semble faire en moins sophistiqué ce que EurekaLog fait pour le monde Delphi/C++Builder. C’est intéressant de voir ce genre de composant apparaître pour Java …
-
- JXTaskPane – équivalent des TRzGroupBar ou TJvOutlookBar ou autre que l’on utilise sous Delphi.
-
- JXTable – plein de fonctionalités sympa pour étendre la JTable de base. Celle qui m’a le plus fait rigoler c’est que maintenant ils proposent une scroll bar horizontale, permettant d’avoir un grand nombre de colonnes sur une page et de défiler pour toutes les voir ! Je pense pas que c’était une blague… et ça prouve l’importance qui avait été mise jusque ces derniers temps sur l’expérience desktop en Java. Heureusement cela semble prendre un autre tournant aujourd’hui avec un notable regain d’intérêt pour les applications J2SE, mais bon à mon sens il y a encore un petit peu de chemin à faire avant de pouvoir goûter à la productivité foudroyante de Delphi / C++Builder.
-
- DropShadowBorder – la possibilité de mettre une ombre portée sur n’importe quel composant, c’est vrai que c’est très puissant.
-
- Morphing2D, BlendComposites, Color Utilities – plein de belles choses au niveau graphisme. Ils ont montré une démo de morphing d’un carré vers une étoile, c’est très impressionnant.
SwingX-WS
C’est le projet permettant de créer les RIA (Rich Internet Application) avec Swing. Il y a différents composants assez intéressants dont le JXMapViewer
(affichage de cartes Yahoo ou Google) et le SimpleDocument
(pour manipuler les DOM très facilement). Aussi un composant que j’ai trouvé super intéressant c’est le HTMLForm
qui permet en lui donnant une URL et le nom de l’élément dans la page, peut extraire la structure du formulaire et permettre ensuite depuis l’objet d’intégrer les valeurs des champs puis de faire un submit directement !
JDIC
C’est le module permettant l’intégration avec le desktop, c’est qui n’est pas négligeable pour une application J2SE. Possibilité d’avoir un navigateur encapsulé dans l’application, d’accéder aux fenêtres système de l’OS sous-jacent, de lancer différents fichiers à travers l’OS (open, print, edit, …).
Axes d’améliorations pour Java 7
\nPour Java 7, les technologies suivantes sont envisagés en vue d’étendre davantage les possibilités d’intégration de Swing avec les plateformes natives, ainsi que la facilité de développement d’application client riche:
-
- Rapidité de lancement
-
- Ajout d’un composant Swing encapsulant le navigateur natif par défaut
-
- Possibilité de faire des fenêtres pariellement transparentes
-
- Facilité et rapidité d’installation
-
- Framework d’animations (basé sur le projet TimingFramework déjà existant
-
- Le data-binding: la possibilité de relier facilement des JavaBean à des sources de données ou à des actions
-
- Le Swing Application Framework, visant à simplifier la création d’une application Swing en fournissant un framework global sur lequel la construire
-
- Syntaxe déclarative pour décrire des fenêtres Swing (comme les bons vieux fichiers *.DFM que nous avons dans Delphi depuis 10 ans…)
-
- Un meilleur rendu natif, notamment au niveau de l’affichage de texte et de l’accélération 3D, ainsi qu’en introduisant (enfin!) des dialogues natifs de sélection de fichier et d’impression
-
- Indépendance de résolution
-
- Ajout de nouveaux composants Swing