SwingLabs - Les nouveaux composants graphiques SwingX
SwingX
Présentation
SwingX, pour Swing eXtension, est le projet principal de SwingLabs. Il permet la création de nouveaux composants qui seront ensuite intégrés à la JDK.
Les demandes de nouveaux composants proviennent directement des entreprises qui souhaitent offrir à leurs clients des IHM se rapprochant de plus en plus de l'environnement dans lequel ils travaillent, à savoir bien souvent Windows XP. Ainsi, des composants comme le JXTaskPane voient le jour.
Les nouveaux composants
SwingX évolu très fréquemment. Ainsi, il est possible de découvrir tous les jours des nouveaux composants en téléchargeant la dernière version de SwingX. par exemple, le dernier en date a été ajouté le 15 mars 2006 : JXGraph.
Voici quelques composants intéressants de la librairie SwingX :
JXTable
Il ajoute des fonctionnalités au JTable (tri des colonnes, choix par l'utilisateur des colonnes à afficher, lignes surlignées,...).Voir l'exemple codé...
JXTreeTable
Il permet d'associer un JTable avec un JTree. Ainsi, chaque noeud de l'arbre correspond à une ligne du tableau :
JXImagePanel
Il permet d'afficher une image sans avoir à redéfinir la méthode PaintComponent de JPanel.Voir l'exemple codé...
JXDatePicker
Il permet de choisir une date. Beaucoup de composants ayant la même fonctions ont été développés et sont disponibles sur internet. JXDatePicker permet alors de dépendre d'une librairie de moins.
JXTitledPanel
Il permet d'afficher un titre sur les panneaux.Voir l'exemple codé...
JXLoginDialog
Cette fenêtre de dialog peut être personnalisée et incluse dans un processus de sécurité EJB par exemple.
JXCollapsiblePane
Il permet de rendre invisible un panneau en le refermant. Le JXTaskPane a par la suite été développé pour immiter les panneaux de l'explorateur de Windows XP. Voici à gauche (en Français) les panneaux de Windows XP et à droite (en Anglais) ceux réalisés avec le JXTaskPane :

JXGraph
Lors de la rédaction de ce site, ce composant est le dernier a avoir été ajouté dans la librairie SwingX (15 mars 2006). Il permet de tracer très proprement des graphiques :

Je vous invite à consulter le site de SwingLabs pour découvrir les autres composants.
Quelques exemples codés...
JXTable
Dans cet exemple ci-après, nous allons créer un tableau en utilisant le composant JXTable. Cela permet de spécifier que nous voulons surligner une ligne sur deux, d'activer le tri des colonnes (nous avons trié selon la première colonne dans la capture ci-dessous), de spécifier que l'utilisateur pourra choisir les colonnes à afficher (comme expliqué dans la bulle de la capture d'écran), de supprimer les traits des lignes et colonnes,...
Le JXTable a également une fonction de recherche disponible par le raccourci clavier Ctrl+F
/* Creation du JXTable avec son Model */
JXTable table = new JXTable(new TableModel() {
[...]
});
/* On ajouter le bouton qui permet de choisir si les colonnes s'affichent ou non */
table.setColumnControlVisible(true);
/* On supprime les traits des lignes et des colonnes */
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
/* On dit de surligner une ligne sur deux */
table.setHighlighters(
new HighlighterPipeline(
new Highlighter[] {
AlternateRowHighlighter.classicLinePrinter
}
)
);
/* On agrandit les colonnes au maximum */
table.packAll();
Voici le résultat :

JXImagePanel
Voici comment insérer très rapidement une image dans un panneau.
imagePanel = new org.jdesktop.swingx.JXImagePanel();
try {
Image image = ImageIO.read(
getClass().getResource("aerith_logo.png"));
imagePanel.setImage(image);
} catch (IOException ex) {
}
Voici le résultat :

JXTitledPanel
Voici comment insérer un titre sur un panneau. Nous ajoutons de plus une ombre à chacun des panneaux. Avec SwingX, tous les composants peuvent disposer d'une ombre paramétrable (couleur, angle, distance).
JXTitledPanel toc = new JXTitledPanel("Table of Contents");
toc.setBorder(new DropShadowBorder());
[...]
JXTitledPanel info = new JXTitledPanel("Information :: Action Framework");
info.setBorder(new DropShadowBorder());
[...]
JXTitledPanel demo = new JXTitledPanel("Demo");
demo.setBorder(new DropShadowBorder());
[...]
Voici le résultat.
La completion automatique
SwingX ajoute une fonctionnalité aux composants Swing existants : la completion automatique. Il est alors possible d'affecter un manager
à une JComboBox ou à un JTextField pour gérer la completion automatique.
JComboBox comboBox = new JComboBox();
[...] // ajoute le modèle de la ComboBox
Configurator.enableAutoCompletion(comboBox);
JList list = [...];
JTextField textField = [...];
/* On ajoute le manager qui fera la completion dans le textField avec les champs de la JList */
Configurator.enableAutoCompletion(list, textField);