Rechercher avec style en utilisant Swing

Rechercher avec style en utilisant Swing

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Démonstration avec Java Web Start

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

Image non disponible Lancez la démonstration

II. Explications

La plupart des applications impliquent la manipulation de données. Vous pouvez créer, éditer, supprimer, déplacer et ... rechercher des données. De nombreux composants graphiques vous permettent d'afficher de manière pratiques les résultats de ces recherches, mais ils manquent tous d'un peu de fantaisie. La version Tiger de MacOS X a introduit une nouvelle technologie nommée Spotlight. Dans le dialogue de préférences, vous pouvez entrer une requête et regarder des spots de lumière éclairer les icônes liées à votre recherche. Pouvons nous utiliser la même astuce avec Swing ?

Bien qu'il soit sympa, cet effet visuel ne peut être appliqué qu'à de petites quantités de données. Pour la démonstration d'aujourd'hui, j'ai mis en place une fausse application de gestion de bibliothèque :

Dragger une image c'est bien, mais ce ne serait pas mieux de pouvoir dragger n'importe quel composant tout en gardant ce bel effet ? Aucun problème :

Image non disponible

Le champs en bas de la page vous laisse saisir une requête pour chercher les livres disponibles dans la bibliothèque. Dans cette démonstration seules les requêtes "sci-fi", "adams", "pratchett" et "books" vous donneront des résultats, donc ne soyez pas trop fantaisistes. Entrez donc une de ces requêtes et pressez Entrée. Voici ce que vous verrez :

Image non disponible

Image non disponible

Joli, non ? Dans cet exemple, j'ai recherché "sci-fi". Voici le résultat pour "pratchett" :

Image non disponible

Avez vous remarqué que le voile noir adapte son opacité en fonction de la quantité de lumière ? Plus vous créez de spots, moins le voile est noir. Et ne vous inquietez pas les spots peuvent se chevaucher :

Image non disponible

Mettre en place cet effet est très simple, c'est une question de qualques lignes :

 
Sélectionnez
SpotlightPanel glassPane = new SpotlightPanel();
this.setGlassPane(glassPane);
// a circular spotlight
glassPane.addSpotlight(50, 50, 100);
// an ellipse
glassPane.addSpotlight(100, 100, 25, 75);

Chaque appel à addSpotlight() retourne une instance de Spotlight que vous pouvez utiliser pour animer le spot. Le gros problème avec le code actuel est causé par l'effet de flou dans la méthode paint. J'applique une ConvolveOp sur le glass pane. Comme la fenêtre est très grande, ca peut consommer pas mal de puissance CPU. Sur des PC un peu lents vous pourrez voir des ralentissements dans le dessin lorsque vous passez la souris au dessus de la fenêtre. Vous pouvez éviter celà en utilisant le constructeur new SpotlightPanel(false) pour desactiver l'effet de flou. Le résultat est moins cool, mais vous pouvez maintenant animer les spots. Si vous activez l'effet, l'animation tournera tout de même suffisamment bien, croyez moi !

Donc, si quelqu'un pouvait trouver un moyen astucieux d'imiter l'effet de flou ... Ca permettrait même de changer l'intensité de l'effet en fonction de l'interêt de chaque résultat de la recherche. Un spot plein désignerais un très bon résultat alors qu'un spot estompé serait un résultat partiel. J'ai déjà essayé d'imiter l'estompement en dessinant des ellipses plus petites dans le spot, mais je n'ai pas trouvé la bonne manière de faire le calcul des couleurs. Si vous pouvez m'aider ... :)

III. Téléchargements

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.