Bonjour, ce petit tutorial va tenter de vous expliquer comment faire de jolie diagramme dans une application JAVA/Swing.
Il est souvent agréable de montrer à ses utilisateurs un diagramme, un camembert ou bien un histogramme, plutôt qu’un gros tableau plein de chiffres. Il existe de nombreuses méthodes pour créer ce genre de graphique. Je vais vous présenter une méthode utilisant JFreeChart. JFreeChart est une bibliothèque java libre (malheuresement la documentation est payante). Elle est assez sexy et facile à utiliser.
Installation
Comme toutes les bibliothèques java, il faut télécharger le .jar et le placer dans un dossier de votre projet. Pour le téléchargement aller à la page [Download] et choississez la version qui correspond à votre système.
Décompressez le contenu de l’archive. Vous devriez obtenir une arborescence de fichier de la forme:
JFreeChart-*.* ant ChangeLog checkstyle docfiles experimental jfreechart-1.0.13-demo.jar lib licence-LGPL.txt maven-jfreechart-project.xml NEWS README.txt source swt tests
Ce qui est important, c’est le dossier lib. En effet, il contient les 3 archives jar nécessaire. À savoir: jfreechart-1.0.13.jar, jcommon-1.0.16.jar et iText-2.1.5.jar
Il faut en premier lier, ces jars avec votre projet java. La première étape est de copier les jars dans le répertoire principal de votre projet. Ensuite, dans eclipse faite un click droit sur votre projet, choississez : Properties. Sélectionnez Java Build Path puis l’onglet libraries
Appuyer sur Add External JARs… et sélectionnez les 3 jars de la JFreeChart que nous avons déplacés. Appuyer sur Ok
Normalement une partie “Referenced Libraries” s’ajoute à l’arborescence de votre projet. Ainsi eclipse inclura jfreechart à la compilation de votre projet.
Création du panel d’affichage des diagrammes.
Ce n’est pas le sujet de ce tutorial donc je ne vais pas m’attarder dessus. Les charts sont tous contenu dans un JPanel. Il suffit donc de créer un JPanel avec un layout adéquat pour mettre en place votre disposition. N’oubliez pas d’encapsuler votre panel dans un JScrollPane.
Premier Diagramme
JFreeChart permet de créer une multitude de diagramme, je ne traiterais que des PieCharts pour le moment. La première chose à faire est de construire un ensemble de valeurs: Pour un PieChart (camenbert), utilisez [DefaultPieDataset], c’est une interface simple et pratique pour stocker des paires valeur/clé. Pour un histogramme, utilisez plutôt une implémentation de [CategoryDataset]
.
DefaultPieDataset union = new DefaultPieDataset(); //remplir l'ensemble union.setValue("Pierre",20.0); union.setValue("Marie",20.0); union.setValue("Jean",20.0); union.setValue("Hime",20.0); union.setValue("Sarah",20.0);
Il est tout à fait possible de faire une boucle for/while pour parcourrir un ensemble de données pour remplir celui du pieChart. Vous n’êtes pas tenu de remplir l’ensemble avant de créer le chart. Si vous ajoutez des valeurs dans l’ensemble après coup, le chart sera automatiquement mis à jour.
Pour créer le diagramme lui même, il suffit de faire appel à l'”usine à diagramme” [pattern factory].
JFreeChart repart = ChartFactory.createPieChart3D("Répartition par personne", union, true, true, false); ChartPanel crepart = new ChartPanel(repart); add(crepart);
Le premier paramètre est, bien sûr, le titre, suivit de l’ensemble de valeurs. Les valeurs booléennes qui suivent sont respectivement : l’affichage de la légende, l’affichage d’un tooltips et la création d’une URL). Une fois le JFreeChart créé, vous devez récuperér l’encapsuler dans un ChartPanel et ajouter ce dernier dans votre Interface Homme Machine (IHM).
Aller plus loin
Personnaliser les couleurs de chaque valeur
Par défaut, JFreeChart utilise des couleurs aléatoire pour coloriser les éléments. Il existe un moyen pour forcer l’utilisation d’une couleur. On reprends l’exemple du dessus et on le modifie un petit peu pour modifier les couleurs
JFreeChart repart= ChartFactory.createPieChart3D("Répartition par personne", union, true, true, false); ChartPanel crepart = new ChartPanel(repart); plot = repart.getPlot(); ((PiePlot)plot).setSectionPaint("Pierre", new Color(255,0,0)); ((PiePlot)plot).setSectionPaint("Marie", new Color(255,255,0)); ((PiePlot)plot).setSectionPaint("Jean", new Color(255,0,255)); ((PiePlot)plot).setSectionPaint("Hime", new Color(0,0,255)); ((PiePlot)plot).setSectionPaint("Sarah", new Color(0,255,255)); add(crepart);
Pour modifier les couleurs, il faut récuperer une instance de Plot. Cela gère l’ensemble des règles de dessins. Dans chaque section, vous définissez la couleur à utiliser. Voici une capture d’écran du résultat final.
Je mettrais à disposition le projet eclipse, d’ici quelques jours. En attendant, je donne le code source du panel principal:
import java.awt.Color; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.plot.Plot; import org.jfree.data.general.DefaultPieDataset; public class Charts extends JPanel { public Charts() { super(); DefaultPieDataset union = new DefaultPieDataset(); union.setValue("Pierre",20.0); union.setValue("Marie",20.0); union.setValue("Jean",20.0); union.setValue("Hime",20.0); union.setValue("Sarah",20.0); JFreeChart repart = ChartFactory.createPieChart3D("Répartition par personne", union,true, true, false); ChartPanel crepart = new ChartPanel(repart); Plot plot = repart.getPlot(); ((PiePlot)plot).setSectionPaint("Pierre", new Color(255,0,0)); ((PiePlot)plot).setSectionPaint("Marie", new Color(255,255,0)); ((PiePlot)plot).setSectionPaint("Jean", new Color(255,0,255)); ((PiePlot)plot).setSectionPaint("Hime", new Color(0,0,255)); ((PiePlot)plot).setSectionPaint("Sarah", new Color(0,255,255)); this.add(crepart); } }
Plus d’Information
- Site officiel de JFreeChart : [JFreeChart]
- La documentation au format javadoc: [API]
- Projet eclipse de l’exemple du tutorial : [ExampleJfreechart.tar.gz]
- Page Wikipédia de JFreeChart : [wiki]