Attendre avec style et l'API Swing

Nos logiciels deviennent de plus en plus complexes et importants. Et malheureusement, aucun d'entre eux ne peut se vanter de ne comporter aucun bug. Il incombe au programmeur la délicate tâche de tester son code avant de le distribuer.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Démonstration Java Web Start

Prérequis : Pour essayer cette démonstration vous devez disposer de Java Web Start (compris avec le JRE et le JDK).

Lancez la démonstration

Attention : Seuls les fichiers AnimatedPanel.java et InfiniteProgressPanel.java sont librement utilisables. Contactez moi pour les autres sources.

II. Explications

Les UI (User Interface) peuvent être très agacantes, tout spécialement quand elles semblent faire quelque chose, mais ne vous disent pas quoi. Pire, certaines ne vous disent même pas combien de temps leur prendra à réaliser leur tâche courante. En tant qu'utilisateur j'ai vécu ca trop souvent. En tant que développeur, je sais combien il est dur de déterminer la durée d'une tâche.

C'est pourquoi, certaines applications, comme l'installeur Mozilla, utilisent une barre de progression infinie. D'habitude, ce genre de composants ressemblent aux barres de progression normales, mais fonctionnent un peu différement. Dans le cas de Mozilla, vous pouvez voir un rectangle rebondir entre les bords de la barre. J'ai aussi vu des barres de progression infinies agissant comme des barres normales, mais revenant en arrière une fois remplies et recommencent. Même si la barre de progression infinie est une bonne idée, ces implémentations "craignent". L'utilisateur n'a pas moyen de comprendre à première vue que la barre de progression est "infinie".

Heureusement, il existe un moyen simple de passer outre cette limitation. J'ai construis deux exemples pour vous montrer quels types de composants de progression infinie peuvent être construits avec Swing. Le premier est montre simplement une image et un label briller.

Image non disponible

Je vous suggère vivement de lancer la demo WebStart pour le voir en action. Une fois l'application lancée, cliquez sur Wiew Sale puis sur le bouton Search. Le code source de cet effet se trouve dans org.progx.salesmanagers.ui.AnimatedPanel. Ce panel est fait d'un message et d'une image. Un thread d'animation change la transparence du message et la brillance de l'image. Le code source est plutôt facile à comprendre.

Cette première solution est jolie, mais pas aussi puissante qu'elle le pourrait. Dans cet exemple, l'UI reste active durant l'animation. Un programme complet devrait faire attention à bien invalider les composants "dangereux". Ma seconde solution utilise le glass pane de la fenêtre. Comme vous devez le savoir, le glass pane est un composant situé au dessus de tous les autres contenants de la fenêtre, tout spécialemnt le content pane. En interceptant tous les évenements de la souris dans le glass pane vous pouvez bloquer toute l'application (les évènements clavier doivent aussi être gérés pour éviter l'utilisation des accélérateurs).

J'ai aussi choisi une autre façon de représenter la barre de progression infinie. Inspiré de MacOS X, org.progx.salesmanagers.ui.InfiniteProgressPanel dessine un ensemble circulaire de barres en train de tourner. Et, devinez quoi ? Le cercle est la forme parfaite pour décrire le caractère inifni du composant de progression. Pour finir, j'ai ajouté un voile pour montrer que l'UI ne peut plus être manipulée. Voilà à quoi celà ressemble :

Image non disponible

Vous devriez vraiment essayer la démo online pour ce composant :) Une fois l'aplication lancée, cliquez sur "New Sale" puis sur le bouton "Perform Sale". Vous noterez l'estompement cyclique du panel. Les constructeurs par défaut vous permettent de choisir la transparence du voile et la durée de l'animation. Le code utilise quelques opérations de Java2D, mais reste facile à comprendre.

Une dernière remarque : InfiniteProgressPanel a été écrit très rapidement et le code est un peu brouillon, tout particulièrement le thread d'animation (qui aurait dû être splitté en trois threads). Le délais de sommeil du thread d'animation a tendance à consommer beaucoup de puissance processeur sur les machines pas très récentes (P4 1.5 Ghz). Celà demande à coup sur quelques optimisations :)

III. Téléchargements

Code source (mirroir HTTP)
Attention : Seuls les fichiers AnimatedPanel.java et InfiniteProgressPanel.java sont librement utilisables. Contactez moi pour les autres sources.

Articles et tutoriels Java
L'essentiel de Java en une heure
L'API java.nio du JDK 1.4
Inversion de contrôle en Java
L'introspection
Le Java Community Process
Conception de tests unitaires avec JUnit
Les Strings se déchaînent
Présentation de SWT
La programmation réseau en Java avec les sockets
Du bon usage de l'héritage et de la composition
Les références et la gestion de la mémoire en Java
Constructeurs et méthodes exportées en Java
Les membres statiques, finaux et non immuables en Java
Les classes et objets immuables en Java
Comprendre et optimiser le Garbage Collector
Les principes de la programmation d'une interface graphique
Les opérateurs binaires en Java
Prenez le contrôle du bureau avec JDIC
Les Java Data Objects (JDO version 1.0.1)
La persistance des données avec Hibernate 2.1.8
Journalisation avec l'API Log4j
Java 5.0 et les types paramétrés
Les annotations de Java 5
Java 1.5 et les types paramétrés
Créer un moteur de recherche avec Lucene
Articles et tutoriels Swing
Threads et performance avec Swing
Rechercher avec style en utilisant Swing
Splash Screen avec Swing et Java3D
Drag & Drop avec style en utilisant Swing
Attendre avec style en utilisant Swing
Mixer Java3D et Swing
Articles et tutoriels Java Web
Redécouvrez le web avec Wicket
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Romain Guy. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.