Let’s Swing !

Vous connaissez Swing ? Oui, enfin non, pas la musique
En plus d’avoir fait danser des générations, il s’agit aussi de la librairie Java pour les interfaces lourdes en Java (ok c’est moins glamour).

A propos de Swing on parle souvent de sa grande complexité et le moins que l’on puisse dire, c’est que ce n’est pas exagéré (là on peut voir la comparaison avec la musique en fin de compte).
Profitons de cet article pour revenir sur quelques uns de ces aspects qui en ont déjà dérouté plus d’un  :

  • la complexité de la gestion de l’EDT
  • les pièges du modèle événementiel.

Si ces deux points viennent souvent en tête des mauvaises pratiques de programmation les plus courantes, leurs effets sont surtout une des causes de la mauvaise réputation de Swing.

Allez, entrons dans le vif du sujet.

… 

 

Substance, une librairie « hype » pour Swing

Mon dernier billet sur Swing pouvait paraître pessimiste puisque je parlais de cette API comme d’une API complexe et qui avait mal évolué avec notamment peu de frameworks autour.
« Peu » ne veut pas pour autant dire « aucun » et c’est justement l’occasion d’aborder Substance, une librairie bien sympathique créé par Kirill Grouchnikov.

A mon sens c’est l’une des librairies qui a le plus profité de la période 2006-2007 et des avancées matérialisées dans Aerith. Romain Guy, l’un des leaders sur Aerith, fait d’ailleurs partie des contributeurs de Substance pour ces précieux conseils.
Les effets de fading, les animations sur les boutons, les tables à couleurs alternées etc… voici des choses facilement abordables avec cette librairie. Attention, comme je l’évoquais dans mon billet « Swing or not Swing, that is the question« , il ne s’agit pas de nouvelles fonctionnalités de Swing mais de fonctionnalités existantes pour lesquelles la librairie propose des outils afin d’en faciliter l’usage.

Par exemple pour utiliser le fading lors de la surbrillange des éléments d’une liste :

JList list = ...; // create the list
FadeConfigurationManager.getInstance().allowFades(FadeKind.ROLLOVER, list);
FadeConfigurationManager.getInstance().allowFades(FadeKind.SELECTION, list);

Nettement plus simple que de le coder soi-même…

Pour voir un apercu de ce que cela peut donner une application est disponible via Java Webstart. Attention, à utiliser avec Java 6, c’est le prix de la modernité 😉

Je vous invite à jouer avec les options générales et notamment à cocher les options suivantes :

  • Focus loop
  • Icon glow
  • Icon rollover
  • Button press
  • Global fade events

Et observez le résultat sur les boutons à icône, tout simplement bluffant…

A cela ajoutez la prévisualisation des fenêtres minimisées, la notion de skin custom… et vous avez un framework que je ne saurais que trop vous conseiller.

Aperçu :

(attention, il est difficile de capturer l’essence d’une animation sur une image fixe, je vous invite à l’essayer par vous-mêmes)

Apercu de l’animation sur un bouton Prévisualisation d’une fenêtre minimisée
button preview