lunedì 5 dicembre 2011

Java esempio utilizzo JFreeChart

In questo post vediamo come generare un semplice grafico usando la libreria JFreeChart ( http://www.jfree.org/jfreechart/ ).
Partiamo da una jsp e inseriamo i dati di vendita di 3 soggetti, quindi invochiamo una servlet che utilizzando JFreeChart crea l'oggetto grafico scrivendolo come immagine png e rinviandola al client.

La jsp è un semplice form con 3 textBox in cui inserire i dati:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="generateChart" method="post" action="Disegna">
<table>
<tr>
<td>Mario:</td><td><input type="text" id="txtMario" name="txtMario"/></td>
</tr>
<tr>
<td>Gino:</td><td><input type="text" id="txtGino" name="txtGino"/></td>
</tr>
<tr>
<td>Pino:</td><td><input type="text" id="txtPino" name="txtPino"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="btnInvio" value="Genera Grafico"/></td>
</tr>
</table>
</form>
</body>
</html>




La servlet è la seguente:

package it.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
/**
 * Servlet implementation class FreeChartGenerator
 */
public class FreeChartGenerator extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FreeChartGenerator() {
        super();
        // TODO Auto-generated constructor stub
    }

    private JFreeChart getGrafico(double[] lista) 
    {
        String[] series=new String[]{"Mario","Gino","Pino"};
        DefaultCategoryDataset cds=new DefaultCategoryDataset();
        for(int i=0;i<lista.length;i++){
            cds.addValue(lista[i], "", series[i]);
        }
   
     JFreeChart hitsByFolderChart = ChartFactory.createBarChart( "Report
 Vendite", "Venditore", "Euro", cds, PlotOrientation.HORIZONTAL, false, 
false, false );
        
        return hitsByFolderChart;
//    
        
        
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        double d1=Double.valueOf(request.getParameter("txtMario"));
        double d2=Double.valueOf(request.getParameter("txtGino"));
        double d3=Double.valueOf(request.getParameter("txtPino"));
        double[] ld=new double[3];
        ld[0]=d1;
        ld[1]=d2;
        ld[2]=d3;
        JFreeChart chart=getGrafico(ld);
        response.setContentType("image/png");
        
        ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, 500, 300);
        
    }

}




Il risultato finale, dopo aver inserito i seguenti dati sulla jsp:





Sarà il seguente:





Nessun commento:

Posta un commento