說完
iReport+jasperReport之scriptlet 下來就得看看圖表了,jasperReport的圖表完全借助于外部的繪圖工具,charts和JFreeChart,其中JFreeChart是目前java最火的一個繪圖工具了,還是引用
JFreeChart簡單使用 來實現我們的圖表吧,說到這里澄清一下,本篇寫的是jasperReport的圖表,下來會專門寫一篇關于jasperReport圖片報表。
jasperReport不重復發明車輪,在報表中是以一個變量的方式引入外部圖表的,下來我們看看是怎么實現
的,新建一變量jfreeChart 如圖:

緊接著我們在報表上放置一圖片控件,下來一篇我會詳細說說圖片問題,右擊設置圖片控件屬性,如圖所示:

net.sf.jasperreports.engine.JRRenderable為jasperReport一個專門用來處理圖表問題公共接口,一切OK,現在就是這個變量怎么才能吧jfreechart傳遞到報表中呢,還記得上篇的scriptlet嗎?
新建一JChartReportDemo.java類,繼承自JRDefaultScriptlet,當然要實現那些方法不過大部分我們都是空實現而已,我們只要在afterReportInit方法內繪制圖表然后在set進去我們定義的那個變量即可:

public void afterReportInit() throws JRScriptletException
{
//create pie chart dataset
DefaultPieDataset dateset = new DefaultPieDataset();

//set dataset value
dateset.setValue("Chinese", 108);
dateset.setValue("Math", 110);
dateset.setValue("English", 74);
dateset.setValue("Science Department", 226);

/**//*
* create jfreeChart object
* the first parameter is pie chart title
* the secend parameter is dataset of pie chart
* the three parameter is boolean value,create chart note
* the four parameter is boolean value,it's a tooltip of move mouse on
* configure chart to generate URLs,It's get a PiePlot3D object
*
*/
JFreeChart freeChart = ChartFactory.createPieChart3D("Report Pie Chart", dateset, true, true, false);
PiePlot3D plot3D = (PiePlot3D) freeChart.getPlot();
plot3D.setNoDataMessage("No data to display");
// set variable "jfreeChart" value
this.setVariableValue("jfreeChart", new JFreeChartRenderer(freeChart));
}
其中plot3D.setNoDataMessage("No data to display");這一句的意思是當沒有顯示出圖表或是圖表沒有數據不顯示時會顯示我們定義的這些信息。
this.setVariableValue("jfreeChart", new JFreeChartRenderer(freeChart));
這一句當然是set數據了,JFreeChartRenderer這個類是JRRenderable接口的間接實現,從API上看jasperReport已不推薦我們使用了。
OK,我們test一下吧!JChartReportMain.java
package org.bulktree.ireport.chart;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;


/** *//**
* @author bulktree Email: laoshulin@gmail.com
* @date Nov 28, 2008
*/

public class JChartReportMain
{

public static void main(String[] args)
{
String path = "D:/workspace/JFreeChartReportDemo.jrxml";

File file = new File(path);
InputStream in;

try
{
HashMap parameters = new HashMap();
parameters.put("ReportTitle", "LAOSHULIN");
in = new FileInputStream(file);
JasperReport jasperReport = JasperCompileManager.compileReport(in);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, new JREmptyDataSource());
JasperViewer viewer = new JasperViewer(jasperPrint);
viewer.setVisible(true);

} catch (Exception e)
{
e.printStackTrace();
}
}
}

看過前面幾篇應該對這個相當熟悉了吧!
posted on 2008-12-19 10:04
凌晨風 閱讀(8986)
評論(16) 編輯 收藏 所屬分類:
iReport + JasperReport 系列