jfreechart报表实例

openkk 12年前
     大家在看这篇文章之前应该已经对它有些了解,它是用来做统计报表的    <br /> 虽然现在jfreechart有更新的版本,但是不要盲目的下载,因为1.0.10以上的版本是不支持中文的或者说中文处理很麻烦。。。    <br /> 下面是个例子,部分是从网上copy来的,经过我自己的测试和修改整理出来。    <br /> main方法中只是调用了本地生成jpg图片,也就是说你可以直接建立一个类运行既可以看到效果。其它的方法大家一定也要仔细参考。    <br />    <pre class="brush:java; toolbar: true; auto-links: false;">*/   package com.test;  import java.awt.Color; import java.awt.Font; import java.awt.RenderingHints; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter;  import javax.servlet.http.HttpSession;  import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartRenderingInfo; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.entity.StandardEntityCollection; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.servlet.ServletUtilities; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.PieDataset;  public class TeachMySelf {  /** * 饼状图 */ public static String generatePieChart(HttpSession session, PrintWriter pw, int w, int h) {    String filename = null;    PieDataset dataset = getDataSet();    JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题      dataset, // 数据集      true, // 是否显示图例      false, // 是否生成工具      false // 是否生成URL链接      );    chart.setBackgroundPaint(Color.pink);    try {     /*------得到chart的保存路径----*/     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());     filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);     /*------使用printWriter将文件写出----*/     ChartUtilities.writeImageMap(pw, filename, info, true);     pw.flush();    } catch (IOException e) {     e.printStackTrace();    }    return filename; }  /** * 柱状图 */ public static String generateBarChart(HttpSession session, PrintWriter pw, int w, int h) {    String filename = null;    CategoryDataset dataset = getDataSet2();    JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题      "水果", // 目录轴的显示标签      "产量", // 数值轴的显示标签      dataset, // 数据集      PlotOrientation.VERTICAL, // 图表方向:水平、垂直      true, // 是否显示图例(对于简单的柱状图必须是false)      false, // 是否生成工具      false // 是否生成URL链接      );     try {     /*------得到chart的保存路径----*/     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());     filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);     /*------使用printWriter将文件写出----*/     ChartUtilities.writeImageMap(pw, filename, info, true);     pw.flush();    } catch (IOException e) {     e.printStackTrace();    }    return filename; }  /** * 折线图 */ public static String generateLineChart(HttpSession session, PrintWriter pw, int w, int h) {    String filename = null;    CategoryDataset dataset = getDataSet3();    JFreeChart chart = ChartFactory.createLineChart("水果产量图", // 图表标题      "水果", // 目录轴的显示标签      "产量", // 数值轴的显示标签      dataset, // 数据集      PlotOrientation.VERTICAL, // 图表方向:水平、垂直      true, // 是否显示图例(对于简单的柱状图必须是false)      false, // 是否生成工具      false // 是否生成URL链接      );     /*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/    chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);     /*------------配置图表属性--------------*/    // 1,设置整个图表背景颜色    chart.setBackgroundPaint(Color.pink);     /*------------设定Plot参数-------------*/    CategoryPlot plot = chart.getCategoryPlot();    // 2,设置详细图表的显示细节部分的背景颜色    //plot.setBackgroundPaint(Color.PINK);    // 3,设置垂直网格线颜色    plot.setDomainGridlinePaint(Color.black);    //4,设置是否显示垂直网格线    plot.setDomainGridlinesVisible(true);    //5,设置水平网格线颜色    plot.setRangeGridlinePaint(Color.blue);    //6,设置是否显示水平网格线    plot.setRangeGridlinesVisible(true);     try {     /*------得到chart的保存路径----*/     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());     filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);     /*------使用printWriter将文件写出----*/     ChartUtilities.writeImageMap(pw, filename, info, true);     pw.flush();    } catch (IOException e) {     e.printStackTrace();    }    return filename; }  /** * 在本地生成图片文件 */ public static void ganarateFruitChart() {    CategoryDataset dataset = getDataSet2();    JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题      "月份", // 目录轴的显示标签      "产量(公斤)", // 数值轴的显示标签      dataset, // 数据集      PlotOrientation.VERTICAL, // 图表方向:水平、垂直      true, // 是否显示图例(对于简单的柱状图必须是false)      false, // 是否生成工具      false // 是否生成URL链接      );     Font font = new Font("华文行楷", 10, 20);     // 设置标题文字,并将其字体设置 此处为图片正上方文字    chart.getTitle().setFont(font);    // 设置底部说明字体    chart.getLegend(0).setItemFont(font);     FileOutputStream fos_jpg = null;    try {     fos_jpg = new FileOutputStream("C:/Documents and Settings/Administrator/桌面/test.jpeg");//这个路径自然是可以随意设置的     ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 500, 350, null);    } catch (FileNotFoundException e) {     e.printStackTrace();    } catch (IOException e) {     e.printStackTrace();    } finally {     try {      fos_jpg.close();     } catch (Exception e) {}    } }  /** * 获取一个饼状图的简单数据集对象 * * @return */ private static PieDataset getDataSet() {    DefaultPieDataset dataset = new DefaultPieDataset();    dataset.setValue("苹果", 100);    dataset.setValue("梨子", 200);    dataset.setValue("葡萄", 300);    dataset.setValue("香蕉", 400);    dataset.setValue("荔枝", 500);    return dataset; }  /** * 获取一个柱状图数据集对象 * * @return */ private static CategoryDataset getDataSet2() {    DefaultCategoryDataset dataset = new DefaultCategoryDataset();    dataset.addValue(100, "北京", "苹果");    dataset.addValue(500, "北京", "荔枝");    dataset.addValue(400, "北京", "香蕉");    dataset.addValue(200, "北京", "梨子");    dataset.addValue(300, "北京", "葡萄");    dataset.addValue(500, "上海", "葡萄");    dataset.addValue(600, "上海", "梨子");    dataset.addValue(400, "上海", "香蕉");    dataset.addValue(700, "上海", "苹果");    dataset.addValue(300, "上海", "荔枝");    dataset.addValue(300, "广州", "苹果");    dataset.addValue(200, "广州", "梨子");    dataset.addValue(500, "广州", "香蕉");    dataset.addValue(400, "广州", "葡萄");    dataset.addValue(700, "广州", "荔枝");    return dataset; }  /** * 获取一个折线图数据集对象 * * @return */ private static CategoryDataset getDataSet3() {    DefaultCategoryDataset dataset = new DefaultCategoryDataset();    dataset.addValue(100, "北京", "一月");    dataset.addValue(200, "北京", "二月");    dataset.addValue(100, "北京", "三月");    dataset.addValue(400, "北京", "四月");    dataset.addValue(300, "北京", "五月");    dataset.addValue(500, "北京", "六月");    dataset.addValue(90, "北京", "七月");    dataset.addValue(700, "北京", "八月");    dataset.addValue(800, "北京", "九月");    dataset.addValue(1000, "北京", "十月");    dataset.addValue(300, "北京", "十一月");    dataset.addValue(700, "北京", "十二月");    dataset.addValue(1200, "上海", "一月");    dataset.addValue(1100, "上海", "二月");    dataset.addValue(1000, "上海", "三月");    dataset.addValue(900, "上海", "四月");    dataset.addValue(800, "上海", "五月");    dataset.addValue(700, "上海", "六月");    dataset.addValue(600, "上海", "七月");    dataset.addValue(500, "上海", "八月");    dataset.addValue(400, "上海", "九月");    dataset.addValue(300, "上海", "十月");    dataset.addValue(200, "上海", "十一月");    dataset.addValue(100, "上海", "十二月");    dataset.addValue(600, "武汉", "一月");    dataset.addValue(500, "武汉", "二月");    dataset.addValue(400, "武汉", "三月");    dataset.addValue(300, "武汉", "四月");    dataset.addValue(200, "武汉", "五月");    dataset.addValue(100, "武汉", "六月");    dataset.addValue(200, "武汉", "七月");    dataset.addValue(300, "武汉", "八月");    dataset.addValue(400, "武汉", "九月");    dataset.addValue(500, "武汉", "十月");    dataset.addValue(600, "武汉", "十一月");    dataset.addValue(700, "武汉", "十二月");    return dataset; }  /** * @param args */ public static void main(String[] args) {    ganarateFruitChart();  } }</pre>    <img title="jfreechart报表实例" border="0" alt="jfreechart报表实例" src="https://simg.open-open.com/show/ac599681f18cbbfdfd7c100800b18ccd.jpg" width="500" height="350" />    <br />    <p> </p>