jfreechart生成餅圖和折線圖,java反射

package com.***t.group;java

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;數組

import javax.servlet.http.HttpServletRequest;dom

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;ide

/**
 * 項目名稱:fit 
 * 類名稱:CreatePicByJFreeChart 
 * 類描述:生成走勢圖的處理類 
 * 建立人:郭洪治 
 * 建立時間:Mar 15, 2010 10:15:22 AM
 * @version
 */
public class CreatePicByJFreeChart {orm

 /**
  * 功能:根據傳入的數據生成指定目錄的走勢圖的處理方法。
  * @param List list 生成圖所須要的list集合
  * @param String CateGory X軸對應的字段
  * @param String value Y軸對應的字段
  * @param String series 底部顯示的標題
  * @param int width 生成圖片的寬
  * @param int height 生成圖片的高
  * @param HttpServletRequest request 當前的request
  * @param String picDir 要生成圖片存儲的目錄,默認爲p_w_picpaths
  * @return String 返回生成圖片的全路徑和名稱
  */
 @SuppressWarnings( { "unchecked", "deprecation" })
 public static String createXYLinePic(List list, String CateGory,String value, String series, int width, int height,HttpServletRequest request, String picDir) {
  try {
   Method metd = null;
   String fdname = null;
   String seriesTemp = series;
   DefaultCategoryDataset linedataset = new DefaultCategoryDataset();對象

   // 遍歷集合
   for (Object object : list) {
    // 獲取集合中的對象類型
    Class clazz = object.getClass();
    // 獲取他的字段數組
    Field[] fds = clazz.getDeclaredFields();
    Object f1 = null;
    Object f2 = null;
    Object objTitle = null;
    // 遍歷該數組Field field : fds
    for (Field field : fds) {
     // 獲得字段名
     fdname = field.getName();
     // 對象序列化常量沒有set和get方法。
     if (!fdname.equals("serialVersionUID")) {
      // 根據字段名找到對應的get方法,null表示無參數
      metd = clazz.getMethod("get" + change(fdname), null);
     }
     // 比較是否在字段數組中存在name字段,若是不存在短路,若是存在繼續判斷該字段的get方法是否存在,同時存在繼續執行
     if (CateGory.equals(fdname) && metd != null) {
      // 調用該字段的get方法
      f1 = metd.invoke(object, null);
     }
     // 同上
     if (value.equals(fdname) && metd != null) {
      f2 = metd.invoke(object, null);
     }
     if (fdname.equals(series)) {
      objTitle = metd.invoke(object, null);
      seriesTemp = objTitle.toString();
     }
    }圖片

    linedataset.addValue(Double.parseDouble(f2.toString()),seriesTemp, f1.toString());
   }
   // 定義圖表對象
   JFreeChart jfreechart = ChartFactory.createLineChart("", "", "",linedataset, PlotOrientation.VERTICAL, true, true, false);
   CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
   // 得到renderer 注意這裏是下嗍造型到lineandshaperenderer!!
   LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer();

   categoryplot.setBackgroundPaint(Color.lightGray);
   // 設置網格線的顏色
   categoryplot.setRangeGridlinePaint(Color.black);
   NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
   CategoryAxis domainAxis = categoryplot.getDomainAxis();   

   //設置X軸座標上的文字 
   domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));   
   //設置X軸的標題文字
   domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));   
   //設置Y軸座標上的文字
   numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));   
   //設置Y軸的標題文字
   numberaxis.setLabelFont(new Font("黑體", Font.PLAIN, 12));   
   //這句代碼解決了底部漢字亂碼的問題 
   jfreechart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));  
   numberaxis.setAutoRangeIncludesZero(true);
   // series 點(即數據點)可見
   lineandshaperenderer.setShapesVisible(true);
   // 定義series爲」First」的(即series1)點之間的連線 ,這裏是虛線,默認是直線
   // lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1,1, 1.0F, new float[] {10F, 6F }, 0.0F));

   //判斷目錄
   String dir = "";
   if(!"".equals(picDir) && picDir != null){
    dir = request.getSession().getServletContext().getRealPath("/"+picDir);
    File file = new File(dir);
    if(!file.exists()){
     file.mkdir();
    }
   }
   //目錄若是不指定時,則默認目錄爲Images
   else {
    dir = request.getSession().getServletContext().getRealPath("/"+"p_w_picpaths");
   }
   String picPathName = dir+"/"+"pic.jpg";
   ChartUtilities.saveChartAsJPEG(new File(picPathName), jfreechart,width, height);
   return picPathName;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  * 功能:根據傳入的數據生成指定目錄的餅圖的處理方法。
  * @param List list 生成圖所須要的list集合
  * @param String CateGory 標題對應的字段
  * @param String value 數據對應的字段
  * @param int width 生成圖片的寬
  * @param int height 生成圖片的高
  * @param HttpServletRequest request 當前的request
  * @param String picDir 要生成圖片存儲的目錄,默認爲p_w_picpaths
  * @return String 返回生成圖片的全路徑和名稱
  */
 @SuppressWarnings("unchecked")
 public static String createPIEPic(List list, String CateGory,String value, int width, int height,HttpServletRequest request, String picDir) {
  try {
   Method metd = null;
   String fdname = null;
   DefaultPieDataset ds = new DefaultPieDataset();
   // 遍歷集合
   for (Object object : list) {
    // 獲取集合中的對象類型
    Class clazz = object.getClass();
    // 獲取他的字段數組
    Field[] fds = clazz.getDeclaredFields();
    Object f1 = null;
    Object f2 = null;
    @SuppressWarnings("unused")
    Object objTitle = null;
    // 遍歷該數組Field field : fds
    for (Field field : fds) {
     // 獲得字段名
     fdname = field.getName();
     // 對象序列化常量沒有set和get方法。
     if (!fdname.equals("serialVersionUID")) {
      // 根據字段名找到對應的get方法,null表示無參數
      metd = clazz.getMethod("get" + change(fdname), null);
     }
     // 比較是否在字段數組中存在name字段,若是不存在短路,若是存在繼續判斷該字段的get方法是否存在,同時存在繼續執行
     if (CateGory.equals(fdname) && metd != null) {
      // 調用該字段的get方法
      f1 = metd.invoke(object, null);
     }
     // 同上
     if (value.equals(fdname) && metd != null) {
      f2 = metd.invoke(object, null);
     }

    }
    ds.setValue(f1.toString(),Double.parseDouble(f2.toString()) );
   }
   //判斷目錄
   String dir = "";
   if(!"".equals(picDir) && picDir != null){
    dir = request.getSession().getServletContext().getRealPath("/"+picDir);
    File file = new File(dir);
    if(!file.exists()){
     file.mkdir();
    }
   }
   //目錄若是不指定時,則默認目錄爲Images
   else {
    dir = request.getSession().getServletContext().getRealPath("/"+"p_w_picpaths");
   }
   String picPathName = dir+"/"+"pic.jpg";
   JFreeChart jfc = ChartFactory.createPieChart3D("", ds, true, false, false); 
   //經過JFreeChart 對象得到 
   PiePlot pieplot = (PiePlot) jfc.getPlot(); 
   // 沒有數據的時候顯示的內容 
   pieplot.setNoDataMessage("無數據可供顯示!"); 

   /* 解決底部和圖上文字亂碼問題 start*/
   jfc.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 14)); 
      pieplot.setLabelFont(new   Font("宋體",   Font.BOLD,   10));
      /* 解決底部和圖上文字亂碼問題 end*/
      pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator(("{0}({2})"), NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
   ChartUtilities.saveChartAsJPEG(new File(picPathName), jfc, width,height);

   return picPathName;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

 /**
  * 功能:將傳入的字符串的第一個字母轉換爲大寫的處理方法
  * @param String src 源字符串
  * @return String 
  */
 public static String change(String src) {
  if (src != null) {
   StringBuffer sb = new StringBuffer(src);
   sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
   return sb.toString();
  } else {
   return null;
  }
 }
}
ci

相關文章
相關標籤/搜索