Développons en Java 2.30 | |
Copyright (C) 1999-2022 Jean-Michel DOUDOUX | (date de publication : 15/06/2022) |
|
Niveau : | Supérieur |
L'écosystème Java est très riche en bibliothèques open source qui couvrent de très nombreux sujets. Leur utilisation permet d'être productif avec des solutions fiables et stables.
Ce chapitre contient plusieurs sections :
JFreeChart est une bibliothèque open source qui permet d'afficher des données statistiques sous la forme de graphiques. Elle possède plusieurs formats dont le camembert, les barres ou les lignes et propose de nombreuses options de configuration pour personnaliser le rendu des graphiques. Elle peut s'utiliser dans des applications standalones ou des applications web et permet également d'exporter le graphique sous la forme d'une image.
https://www.jfree.org/jfreechart/
La version utilisée dans cette section est la 0.9.18.
Pour l'utiliser, il faut télécharger le fichier jfreechart-0.9.18.zip et le décompresser. Son utilisation nécessite l'ajout dans le classpath des fichiers jfreechart-0.9.18.zip et des fichiers .jar présents dans le répertoire lib décompressé.
Les données utilisées dans le graphique sont encapsulées dans un objet de type Dataset. Il existe plusieurs sous-types de cette classe en fonction du type de graphique souhaité.
Un objet de type JFreechart encapsule le graphique. Une instance d'un tel objet est obtenue en utilisant une des méthodes de la classe ChartFactory.
Exemple : Un exemple avec un graphique en forme de camembert |
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.*;
public class TestPieChart extends JFrame {
private JPanel pnl;
public TestPieChart() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
pnl = new JPanel(new BorderLayout());
setContentPane(pnl);
setSize(400, 250);
DefaultPieDataset pieDataset = new DefaultPieDataset();
pieDataset.setValue("Valeur1", new Integer(27));
pieDataset.setValue("Valeur2", new Integer(10));
pieDataset.setValue("Valeur3", new Integer(50));
pieDataset.setValue("Valeur4", new Integer(5));
JFreeChart pieChart = ChartFactory.createPieChart("Test camembert",
pieDataset, true, true, true);
ChartPanel cPanel = new ChartPanel(pieChart);
pnl.add(cPanel);
}
public static void main(String args[]) {
TestPieChart tpc = new TestPieChart();
tpc.setVisible(true);
}
} |
Pour chaque graphique, il existe de nombreuses possibilités de configuration.
Exemple : |
...
JFreeChart pieChart = ChartFactory.createPieChart("Test camembert",
pieDataset, true, true, true);
PiePlot piePlot = (PiePlot) pieChart.getPlot();
piePlot.setExplodePercent(1, 0.5);
Legend legend = pieChart.getLegend();
legend.setAnchor(Legend.EAST_NORTHEAST);
ChartPanel cPanel = new ChartPanel(pieChart);
... |
Il est très facile d'exporter le graphique dans un flux.
Exemple : enregistrement du graphique dans un fichier |
...
File fichier = new File("image.png");
try {
ChartUtilities.saveChartAsPNG(fichier, pieChart, 400, 250);
} catch (IOException e) {
e.printStackTrace();
}
... |
JFreeChart propose aussi plusieurs autres types de graphiques dont les histogrammes.
Exemple : un graphique sous formes de barres |
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.*;
public class TestBarChart extends JFrame {
private JPanel pnl;
public TestBarChart() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
pnl = new JPanel(new BorderLayout());
setContentPane(pnl);
setSize(400, 250);
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(120000.0, "Produit 1", "2000");
dataset.addValue(550000.0, "Produit 1", "2001");
dataset.addValue(180000.0, "Produit 1", "2002");
dataset.addValue(270000.0, "Produit 2", "2000");
dataset.addValue(600000.0, "Produit 2", "2001");
dataset.addValue(230000.0, "Produit 2", "2002");
dataset.addValue(90000.0, "Produit 3", "2000");
dataset.addValue(450000.0, "Produit 3", "2001");
dataset.addValue(170000.0, "Produit 3", "2002");
JFreeChart barChart = ChartFactory.createBarChart("Evolution des ventes", "",
"Unité vendue", dataset, PlotOrientation.VERTICAL, true, true, false);
ChartPanel cPanel = new ChartPanel(barChart);
pnl.add(cPanel);
}
public static void main(String[] args) {
TestBarChart tbc = new TestBarChart();
tbc.setVisible(true);
}
} |
JFreechart peut aussi être mis en oeuvre dans une application web, le plus pratique étant d'utiliser une servlet qui renvoie dans la réponse une image générée par JfreeChart.
Exemple : JSP qui affiche le graphique |
<%@ page language="java" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Test JFreeChart</title>
</head>
<body bgcolor="#FFFFFF">
<H1>Exemple de graphique avec JFreeChart</h1>
<img src="/testlomboz2/ServletBarChart">
</body>
</html> |
Dans l'exemple précédent, l'image contenant le graphique est générée par une servlet.
Exemple : servlet qui générère l'image |
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.*;
public class ServletBarChart extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(120000.0, "Produit 1", "2000");
dataset.addValue(550000.0, "Produit 1", "2001");
dataset.addValue(180000.0, "Produit 1", "2002");
dataset.addValue(270000.0, "Produit 2", "2000");
dataset.addValue(600000.0, "Produit 2", "2001");
dataset.addValue(230000.0, "Produit 2", "2002");
dataset.addValue(90000.0, "Produit 3", "2000");
dataset.addValue(450000.0, "Produit 3", "2001");
dataset.addValue(170000.0, "Produit 3", "2002");
JFreeChart barChart = ChartFactory.createBarChart("Evolution des ventes", "",
"Unité vendue", dataset, PlotOrientation.VERTICAL, true, true, false);
OutputStream out = response.getOutputStream();
response.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, barChart, 400, 300);
}
} |
Cette section n'a proposé qu'une introduction à JFreeChart en proposant quelques exemples très simples sur les nombreuses possibilités de cette puissante bibliothèque.
Beanshell est un interpréteur de scripts qu'il est possible d'intégrer dans une application.
Le site officiel du projet est à l'url http://www.beanshell.org/
Le projet Apache Commons a pour but de fournir des utilitaires.
Le site officiel du projet est à l'url https://commons.apache.org/.
Cette bibliothèque propose de faciliter le développement d'applications graphiques utilisant Swing.
Le site officiel du projet est à l'url : http://www.jgoodies.com/.
Apache Lucene est un moteur d'indexation et de recherche de texte.
Le site officiel du projet est à l'url : https://lucene.apache.org/.
|