{"id":17,"date":"2009-11-06T13:45:27","date_gmt":"2009-11-06T13:45:27","guid":{"rendered":"http:\/\/liberty.fdn.fr\/?p=17"},"modified":"2025-08-17T20:13:31","modified_gmt":"2025-08-17T20:13:31","slug":"jfreechart-dans-vos-applications-java","status":"publish","type":"post","link":"http:\/\/renaudguezennec.eu\/index.php\/2009\/11\/06\/jfreechart-dans-vos-applications-java\/","title":{"rendered":"JFreeChart dans vos applications Java"},"content":{"rendered":"<div id=\"moz-reader-content\">\n<div id=\"readability-page-1\" class=\"page\">\n<div id=\"millieu\" class=\"divmilieu\">\n<p>Bonjour, ce petit tutorial va tenter de vous expliquer comment faire de jolie diagramme dans une application JAVA\/Swing.<br \/>\nIl est souvent agr\u00e9able de montrer \u00e0 ses utilisateurs un diagramme, un camembert ou bien un histogramme, plut\u00f4t qu&#8217;un gros tableau plein de chiffres. Il existe de nombreuses m\u00e9thodes pour cr\u00e9er ce genre de graphique. Je vais vous pr\u00e9senter une m\u00e9thode utilisant JFreeChart. JFreeChart est une biblioth\u00e8que java libre (malheuresement la documentation est payante). Elle est assez sexy et facile \u00e0 utiliser.<\/p>\n<h2>Installation<\/h2>\n<p>Comme toutes les biblioth\u00e8ques java, il faut t\u00e9l\u00e9charger le .jar et le placer dans un dossier de votre projet. Pour le t\u00e9l\u00e9chargement aller \u00e0 la page [<a href=\"https:\/\/sourceforge.net\/projects\/jfreechart\/files\/\">Download<\/a>] et choississez la version qui correspond \u00e0 votre syst\u00e8me.<\/p>\n<p>D\u00e9compressez le contenu de l&#8217;archive. Vous devriez obtenir une arborescence de fichier de la forme:<\/p>\n<pre class=\"code\">JFreeChart-*.*\r\n    ant\r\n    ChangeLog\r\n    checkstyle\r\n    docfiles\r\n    experimental\r\n    jfreechart-1.0.13-demo.jar\r\n    lib\r\n    licence-LGPL.txt\r\n    maven-jfreechart-project.xml\r\n    NEWS\r\n    README.txt\r\n    source\r\n    swt\r\n    tests\r\n<\/pre>\n<p>Ce qui est important, c&#8217;est le dossier <span class=\"filename\">lib<\/span>. En effet, il contient les 3 archives jar n\u00e9cessaire. \u00c0 savoir: <span class=\"filename\">jfreechart-1.0.13.jar<\/span>, <span class=\"filename\">jcommon-1.0.16.jar<\/span> et <span class=\"filename\">iText-2.1.5.jar<\/span><\/p>\n<p>Il faut en premier lier, ces jars avec votre projet java. La premi\u00e8re \u00e9tape est de copier les jars dans le r\u00e9pertoire principal de votre projet. Ensuite, dans eclipse faite un click droit sur votre projet, choississez : <span class=\"filename\">Properties<\/span>. S\u00e9lectionnez <span class=\"filename\">Java Build Path<\/span> puis l&#8217;onglet <span class=\"filename\">libraries<\/span><\/p>\n<p>Appuyer sur <span class=\"filename\">Add External JARs&#8230;<\/span> et s\u00e9lectionnez les 3 jars de la JFreeChart que nous avons d\u00e9plac\u00e9s. Appuyer sur <span class=\"filename\">Ok<\/span><\/p>\n<p>Normalement une partie &#8220;Referenced Libraries&#8221; s&#8217;ajoute \u00e0 l&#8217;arborescence de votre projet. Ainsi eclipse inclura jfreechart \u00e0 la compilation de votre projet.<\/p>\n<h2>Cr\u00e9ation du panel d&#8217;affichage des diagrammes.<\/h2>\n<p>Ce n&#8217;est pas le sujet de ce tutorial donc je ne vais pas m&#8217;attarder dessus. Les charts sont tous contenu dans un JPanel. Il suffit donc de cr\u00e9er un JPanel avec un layout ad\u00e9quat pour mettre en place votre disposition. N&#8217;oubliez pas d&#8217;encapsuler votre panel dans un JScrollPane.<\/p>\n<h2>Premier Diagramme<\/h2>\n<p>JFreeChart permet de cr\u00e9er une multitude de diagramme, je ne traiterais que des PieCharts pour le moment. La premi\u00e8re chose \u00e0 faire est de construire un ensemble de valeurs: Pour un PieChart (camenbert), utilisez [<span class=\"filename\"><a href=\"http:\/\/www.jfree.org\/jfreechart\/api\/javadoc\/org\/jfree\/data\/general\/DefaultPieDataset.html\">DefaultPieDataset<\/a><\/span>], c&#8217;est une interface simple et pratique pour stocker des paires valeur\/cl\u00e9. Pour un histogramme, utilisez plut\u00f4t une impl\u00e9mentation de [<a href=\"http:\/\/www.jfree.org\/jfreechart\/api\/javadoc\/org\/jfree\/data\/category\/CategoryDataset.html\">CategoryDataset<\/a>]<\/p>\n<p class=\"readability-styled\">.<\/p>\n<pre class=\"code\">DefaultPieDataset union = new DefaultPieDataset();\r\n\/\/remplir l'ensemble\r\nunion.setValue(\"Pierre\",20.0);\r\nunion.setValue(\"Marie\",20.0);\r\nunion.setValue(\"Jean\",20.0);\r\nunion.setValue(\"Hime\",20.0);\r\nunion.setValue(\"Sarah\",20.0);\r\n<\/pre>\n<p>Il est tout \u00e0 fait possible de faire une boucle for\/while pour parcourrir un ensemble de donn\u00e9es pour remplir celui du pieChart. Vous n&#8217;\u00eates pas tenu de remplir l&#8217;ensemble avant de cr\u00e9er le chart. Si vous ajoutez des valeurs dans l&#8217;ensemble apr\u00e8s coup, le chart sera automatiquement mis \u00e0 jour.<\/p>\n<p>Pour cr\u00e9er le diagramme lui m\u00eame, il suffit de faire appel \u00e0 l'&#8221;usine \u00e0 diagramme&#8221; [pattern factory].<\/p>\n<pre class=\"code\">JFreeChart repart = \r\n    ChartFactory.createPieChart3D(\"R\u00e9partition par personne\",\r\n    union, true, true, false);\r\nChartPanel crepart = new ChartPanel(repart);\r\nadd(crepart);\r\n<\/pre>\n<p>Le premier param\u00e8tre est, bien s\u00fbr, le titre, suivit de l&#8217;ensemble de valeurs. Les valeurs bool\u00e9ennes qui suivent sont respectivement : l&#8217;affichage de la l\u00e9gende, l&#8217;affichage d&#8217;un tooltips et la cr\u00e9ation d&#8217;une URL). Une fois le JFreeChart cr\u00e9\u00e9, vous devez r\u00e9cuper\u00e9r l&#8217;encapsuler dans un ChartPanel et ajouter ce dernier dans votre Interface Homme Machine (IHM).<\/p>\n<h2>Aller plus loin<\/h2>\n<h3>Personnaliser les couleurs de chaque valeur<\/h3>\n<p>Par d\u00e9faut, JFreeChart utilise des couleurs al\u00e9atoire pour coloriser les \u00e9l\u00e9ments. Il existe un moyen pour forcer l&#8217;utilisation d&#8217;une couleur. On reprends l&#8217;exemple du dessus et on le modifie un petit peu pour modifier les couleurs<\/p>\n<pre class=\"code\">JFreeChart repart= \r\n    ChartFactory.createPieChart3D(\"R\u00e9partition par personne\",\r\n    union, true, true, false);\r\nChartPanel crepart = new ChartPanel(repart);\r\nplot = repart.getPlot();\r\n((PiePlot)plot).setSectionPaint(\"Pierre\", new Color(255,0,0));\r\n((PiePlot)plot).setSectionPaint(\"Marie\", new Color(255,255,0));\r\n((PiePlot)plot).setSectionPaint(\"Jean\", new Color(255,0,255));\r\n((PiePlot)plot).setSectionPaint(\"Hime\", new Color(0,0,255));\r\n((PiePlot)plot).setSectionPaint(\"Sarah\", new Color(0,255,255));\r\nadd(crepart);\r\n<\/pre>\n<p>Pour modifier les couleurs, il faut r\u00e9cuperer une instance de Plot. Cela g\u00e8re l&#8217;ensemble des r\u00e8gles de dessins. Dans chaque section, vous d\u00e9finissez la couleur \u00e0 utiliser. Voici une capture d&#8217;\u00e9cran du r\u00e9sultat final. <a title=\"Capture d'\u00e9cran JFreeChart\" href=\"http:\/\/renaudguezennec.eu\/prog\/tutorial\/12\/capture.png\" rel=\"lightbox\"><img decoding=\"async\" src=\"http:\/\/renaudguezennec.eu\/prog\/tutorial\/12\/capture.png\" alt=\"Capture d'\u00e9cran JFreeChart\" \/><\/a><\/p>\n<p>Je mettrais \u00e0 disposition le projet eclipse, d&#8217;ici quelques jours. En attendant, je donne le code source du panel principal:<\/p>\n<pre class=\"code\">import java.awt.Color;\r\nimport javax.swing.JPanel;\r\nimport org.jfree.chart.ChartFactory;\r\nimport org.jfree.chart.ChartPanel;\r\nimport org.jfree.chart.JFreeChart;\r\nimport org.jfree.chart.plot.PiePlot;\r\nimport org.jfree.chart.plot.Plot;\r\nimport org.jfree.data.general.DefaultPieDataset;\r\n\r\npublic class Charts extends JPanel\r\n{\r\n    public Charts() \r\n    {\r\n        super();\r\n        DefaultPieDataset union = new DefaultPieDataset();\r\n        union.setValue(\"Pierre\",20.0);\r\n        union.setValue(\"Marie\",20.0);\r\n        union.setValue(\"Jean\",20.0);\r\n        union.setValue(\"Hime\",20.0);\r\n        union.setValue(\"Sarah\",20.0);\r\n        JFreeChart repart = \r\n            ChartFactory.createPieChart3D(\"R\u00e9partition par personne\",\r\n            union,true, true, false);\r\n        ChartPanel crepart = new ChartPanel(repart);\r\n        Plot plot = repart.getPlot();\r\n        ((PiePlot)plot).setSectionPaint(\"Pierre\", new Color(255,0,0));\r\n        ((PiePlot)plot).setSectionPaint(\"Marie\", new Color(255,255,0));\r\n        ((PiePlot)plot).setSectionPaint(\"Jean\", new Color(255,0,255));\r\n        ((PiePlot)plot).setSectionPaint(\"Hime\", new Color(0,0,255));\r\n        ((PiePlot)plot).setSectionPaint(\"Sarah\", new Color(0,255,255));\r\n        \r\n        this.add(crepart);\r\n    }\r\n}\r\n<\/pre>\n<h2>Plus d&#8217;Information<\/h2>\n<ul class=\"disc\">\n<li>Site officiel de JFreeChart : [<a href=\"http:\/\/www.jfree.org\/jfreechart\/\">JFreeChart<\/a>]<\/li>\n<li>La documentation au format javadoc: [<a href=\"http:\/\/www.jfree.org\/jfreechart\/api\/javadoc\/index.html\">API<\/a>]<\/li>\n<li>Projet eclipse de l&#8217;exemple du tutorial : [<a href=\"http:\/\/renaudguezennec.eu\/prog\/tutorial\/12\/ExampleJfreechart.tar.gz\">ExampleJfreechart.tar.gz<\/a>]<\/li>\n<li>Page Wikip\u00e9dia de JFreeChart : [<a href=\"http:\/\/fr.wikipedia.org\/wiki\/JFreeChart\">wiki<\/a>]<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bonjour, ce petit tutorial va tenter de vous expliquer comment faire de jolie diagramme dans une application JAVA\/Swing. Il est souvent agr\u00e9able de montrer \u00e0 ses utilisateurs un diagramme, un camembert ou bien un histogramme, plut\u00f4t qu&#8217;un gros tableau plein de chiffres. Il existe de nombreuses m\u00e9thodes pour cr\u00e9er ce genre de graphique. Je vais [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[80,23],"tags":[16,14,15],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-fr","category-tutorial","tag-chart","tag-java","tag-swing"],"_links":{"self":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":1,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts\/17\/revisions"}],"predecessor-version":[{"id":18,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/posts\/17\/revisions\/18"}],"wp:attachment":[{"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/media?parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/categories?post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/renaudguezennec.eu\/index.php\/wp-json\/wp\/v2\/tags?post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}