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]