April 21st, 2009 @ 9:51pm | njames | Categories Java | 2 Comments »
Ces derniers temps, je cherchais un widget graphique en Java pour naviguer dans une collection d'image (éventuellement assez grande, genre 25.000 documents), quelque chose à la GThumb (en stand alone, pas une application web), avec un chargement dynamique et qui ne vampirise pas le thread d'affichage.
Mais je n'ai rien trouvé qui me convienne vraiment, car de plus, je voudrais pouvoir afficher près de chaque image, des métadonnées issues de traitement d'image (des informations stockées dans un fichier XML à la mpeg-7).

Dans le toolkit SWT, il y a le Nebula project qui a été lancé pour apporter des customs widgets à SWT: CalendarCombo, CDateTime, CollapsibleButtons, CompositeTable, DateChooser, DateChooserCombo, FormattedText, Gallery, Grid, GanttChart, PGroup, PShelf.

Le widget Gallery est très intéressant:

Nebula Gallery SWT widget

En partant d'un snippet pour afficher une collection d'image, j'ai fait un petit projet nommé Galatee, affichant les images avec un chargement dynamique des documents load-when-you-see.
J'ai codé un ImageLoaderThreadPoolThread qui est un thread Java classique, qui vide une queue d'images à charger, et qui démarre un thread SWT GUI de mise à jour de l'affichage une fois qu'une image est chargée (et redimensionnée pour son affichage).

L'application sur le jeu de donnée MIRFlickr:

screenshot-iidf-browser


Un problème cependant: l'intégration de widgets graphique en SWT est une chose un brin... problématique: je voudrais utiliser un scrollpane dans chaque cellule de ma grille d'images, et ajouter la liste de mes métadonnées dans ce scrollpane. En swing on peut faire cela avec un custom components (le widget est instancié une seule fois mais dessiné plusieurs fois, dans un JTableRenderer), mais en SWT c'est plus délicat car les widgets sont des widgets système...