jfreechart報表實例

openkk 13年前發布 | 42K 次閱讀 JFreeChart 圖表/報表制作

大家在看這篇文章之前應該已經對它有些了解,它是用來做統計報表的
雖然現在jfreechart有更新的版本,但是不要盲目的下載,因為1.0.10以上的版本是不支持中文的或者說中文處理很麻煩。。。
下面是個例子,部分是從網上copy來的,經過我自己的測試和修改整理出來。
main方法中只是調用了本地生成jpg圖片,也就是說你可以直接建立一個類運行既可以看到效果。其它的方法大家一定也要仔細參考。

*/

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> jfreechart報表實例

 

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!