iReport+jasperReport之JFreeChart(图表报表)

        说完iReport+jasperReport之scriptlet 下来就得看看图表了,jasperReport的图表完全借助于外部的绘图工具,charts和JFreeChart,其中JFreeChart是目前java最火的一个绘图工具了,还是引用JFreeChart简单使用 来实现我们的图表吧,说到这里澄清一下,本篇写的是jasperReport的图表,下来会专门写一篇关于jasperReport图片报表。
        jasperReport不重复发明车轮,在报表中是以一个变量的方式引入外部图表的,下来我们看看是怎么实现
的,新建一变量jfreeChart 如图:
iReport+jasperReport之JFreeChart(图表报表)
        紧接着我们在报表上放置一图片控件,下来一篇我会详细说说图片问题,右击设置图片控件属性,如图所示:
iReport+jasperReport之JFreeChart(图表报表)
net.sf.jasperreports.engine.JRRenderable为jasperReport一个专门用来处理图表问题公共接口,一切OK,现在就是这个变量怎么才能吧jfreechart传递到报表中呢,还记得上篇的scriptlet吗?
新建一JChartReportDemo.java类,继承自JRDefaultScriptlet,当然要实现那些方法不过大部分我们都是空实现而已,我们只要在afterReportInit方法内绘制图表然后在set进去我们定义的那个变量即可:
iReport+jasperReport之JFreeChart(图表报表)iReport+jasperReport之JFreeChart(图表报表)public void afterReportInit() throws JRScriptletException iReport+jasperReport之JFreeChart(图表报表){
iReport+jasperReport之JFreeChart(图表报表)        
iReport+jasperReport之JFreeChart(图表报表)        
//create pie chart dataset
iReport+jasperReport之JFreeChart(图表报表)
        DefaultPieDataset dateset = new DefaultPieDataset();
iReport+jasperReport之JFreeChart(图表报表)
iReport+jasperReport之JFreeChart(图表报表)        
//set dataset value
iReport+jasperReport之JFreeChart(图表报表)
        dateset.setValue("Chinese"108);
iReport+jasperReport之JFreeChart(图表报表)        dateset.setValue(
"Math"110);
iReport+jasperReport之JFreeChart(图表报表)        dateset.setValue(
"English"74);
iReport+jasperReport之JFreeChart(图表报表)        dateset.setValue(
"Science Department"226);
iReport+jasperReport之JFreeChart(图表报表)        
iReport+jasperReport之JFreeChart(图表报表)iReport+jasperReport之JFreeChart(图表报表)        
/**//*
iReport+jasperReport之JFreeChart(图表报表)         * create jfreeChart object
iReport+jasperReport之JFreeChart(图表报表)         * the first parameter is pie chart title
iReport+jasperReport之JFreeChart(图表报表)         * the secend parameter is dataset of pie chart
iReport+jasperReport之JFreeChart(图表报表)         * the three parameter is boolean value,create chart note
iReport+jasperReport之JFreeChart(图表报表)         * the four parameter is boolean value,it's a tooltip of move mouse on
iReport+jasperReport之JFreeChart(图表报表)         * configure chart to generate URLs,It's get a PiePlot3D object
iReport+jasperReport之JFreeChart(图表报表)         * 
iReport+jasperReport之JFreeChart(图表报表)         
*/

iReport+jasperReport之JFreeChart(图表报表)        JFreeChart freeChart 
= ChartFactory.createPieChart3D("Report Pie Chart", dateset, truetruefalse);
iReport+jasperReport之JFreeChart(图表报表)        
iReport+jasperReport之JFreeChart(图表报表)        PiePlot3D plot3D 
= (PiePlot3D) freeChart.getPlot();
iReport+jasperReport之JFreeChart(图表报表)        plot3D.setNoDataMessage(
"No data to display");
iReport+jasperReport之JFreeChart(图表报表)        
iReport+jasperReport之JFreeChart(图表报表)        
// set variable "jfreeChart" value
iReport+jasperReport之JFreeChart(图表报表)
        this.setVariableValue("jfreeChart"new JFreeChartRenderer(freeChart));
iReport+jasperReport之JFreeChart(图表报表)    }
其中plot3D.setNoDataMessage("No data to display");这一句的意思是当没有显示出图表或是图表没有数据不显示时会显示我们定义的这些信息。
iReport+jasperReport之JFreeChart(图表报表)this.setVariableValue("jfreeChart"new JFreeChartRenderer(freeChart));
这一句当然是set数据了,JFreeChartRenderer这个类是JRRenderable接口的间接实现,从API上看jasperReport已不推荐我们使用了。
    OK,我们test一下吧!JChartReportMain.java
iReport+jasperReport之JFreeChart(图表报表)package org.bulktree.ireport.chart;
iReport+jasperReport之JFreeChart(图表报表)
iReport+jasperReport之JFreeChart(图表报表)
import java.io.File;
iReport+jasperReport之JFreeChart(图表报表)
import java.io.FileInputStream;
iReport+jasperReport之JFreeChart(图表报表)
import java.io.InputStream;
iReport+jasperReport之JFreeChart(图表报表)
import java.util.HashMap;
iReport+jasperReport之JFreeChart(图表报表)
iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JREmptyDataSource;
iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperCompileManager;
iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperFillManager;
iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperPrint;
iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.engine.JasperReport;
iReport+jasperReport之JFreeChart(图表报表)
import net.sf.jasperreports.view.JasperViewer;
iReport+jasperReport之JFreeChart(图表报表)
iReport+jasperReport之JFreeChart(图表报表)iReport+jasperReport之JFreeChart(图表报表)
/** *//**
iReport+jasperReport之JFreeChart(图表报表) * 
@author bulktree Email: [email protected]
iReport+jasperReport之JFreeChart(图表报表) * @date Nov 28, 2008
iReport+jasperReport之JFreeChart(图表报表) 
*/

iReport+jasperReport之JFreeChart(图表报表)iReport+jasperReport之JFreeChart(图表报表)
public class JChartReportMain iReport+jasperReport之JFreeChart(图表报表){
iReport+jasperReport之JFreeChart(图表报表)iReport+jasperReport之JFreeChart(图表报表)    
public static void main(String[] args) iReport+jasperReport之JFreeChart(图表报表){
iReport+jasperReport之JFreeChart(图表报表)        String path 
= "D:/workspace/JFreeChartReportDemo.jrxml";
iReport+jasperReport之JFreeChart(图表报表)
iReport+jasperReport之JFreeChart(图表报表)        File file 
= new File(path);
iReport+jasperReport之JFreeChart(图表报表)        InputStream in;
iReport+jasperReport之JFreeChart(图表报表)iReport+jasperReport之JFreeChart(图表报表)        
try iReport+jasperReport之JFreeChart(图表报表){
iReport+jasperReport之JFreeChart(图表报表)            HashMap parameters 
= new HashMap();
iReport+jasperReport之JFreeChart(图表报表)            parameters.put(
"ReportTitle""LAOSHULIN");
iReport+jasperReport之JFreeChart(图表报表)            in 
= new FileInputStream(file);
iReport+jasperReport之JFreeChart(图表报表)            JasperReport jasperReport 
= JasperCompileManager.compileReport(in);
iReport+jasperReport之JFreeChart(图表报表)            JasperPrint jasperPrint 
= JasperFillManager.fillReport(jasperReport,
iReport+jasperReport之JFreeChart(图表报表)                    parameters, 
new JREmptyDataSource());
iReport+jasperReport之JFreeChart(图表报表)            JasperViewer viewer 
= new JasperViewer(jasperPrint);
iReport+jasperReport之JFreeChart(图表报表)            viewer.setVisible(
true);
iReport+jasperReport之JFreeChart(图表报表)iReport+jasperReport之JFreeChart(图表报表)        }
 catch (Exception e) iReport+jasperReport之JFreeChart(图表报表){
iReport+jasperReport之JFreeChart(图表报表)            e.printStackTrace();
iReport+jasperReport之JFreeChart(图表报表)        }

iReport+jasperReport之JFreeChart(图表报表)    }

iReport+jasperReport之JFreeChart(图表报表)}

iReport+jasperReport之JFreeChart(图表报表)
看过前面几篇应该对这个相当熟悉了吧!iReport+jasperReport之JFreeChart(图表报表)