熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java程序中用JFreeChart制作圖形報表

2013-11-15 11:49:24  來源: JSP教程 

  需求分析
  
  我家領導認為在是否嫁給我做老婆的問題上應該有更加科學的決策模型如果能夠將每天的感情生活量化且以時間為X軸生成數據報表就可以為她的決策提供數據支持秉著以領導意志為導向的基本原則開發了本軟件為家庭信息化建設提供新的思路
  
  系統概述
  
  本系統的基本功能是接收用戶每天的輸入並保存月/季度/年度末生成數據折線圖周期環比柱狀圖由於投入資金有限(不讓我往外掏錢就已經很不錯了)所以本軟件的版采用單機應用程序使用Access數據庫如果市場推廣情況良好不排除推出大型FRP軟件(Family Resource Project)的可能屆時將包含KRM(Kin Relation Manage家族關系管理)HA(House Automatization家庭自動化)等模塊利用強大的JEE框架為家庭信息化建設提供完整解決方案
  
  程序生成的目標圖片效果如下
  
 

  系統要求
  
   開源工具包jfreechartprejar和它自己要使用的工具包jcommonprejar
  
  下載地址
  
   女朋友一個
  
  請自行准備暫不提供下載
  
  下面主要講述系統是如何從數據庫中提取數據然後生成圖形報表的(終於進入正題了
  
  數據表結構
  

  用於封裝每個分數的值對象如下
  
  package orgbromonfionacurvedao;
  
  import javautil*;
  
  public class CurveVo
  {
  private int year;
  
  private int month;
  
  private int day;
  
  private double cent;
  
  private String note;
  
  private String owner;
  
  //get/set方法
  
  …………
  }
  
  生成圖片的關鍵代碼如下
  
  package orgbromonfionacurveutil;
  
  //一大堆import
  
  public class DrawPic
  {
  /**
  *根據時間查詢數據將所得到的數據封裝成TimeSeriesCollection對象
  *TimeSeriesCollection是JfreeChart中定義的類的對象
  *本方法將被後面的draw方法調用
  *@param int 要查詢哪一年
  *@param int 要查詢哪一月
  *@return TimeSeriesCollection
  */
  
  public TimeSeriesCollection getData(int yearint month)
  {
  //fiona的數據集合其中存放的是上面定義過的CurveVo值對象
  //這些值對象的值來自於數據庫相關代碼是最常見的jdbc內容請自行完成
  
  List dataOfFiona=new ArrayList();
  
  //Bromon的數據集合
  
  List dataOfBromon=new ArrayList();
  
  //構造要返回的對象
  
  TimeSeriesCollection result=new TimeSeriesCollection();
  
  //這兩個對象分別對應一條曲線構造函數的參數將顯示在圖片的下方
  
  TimeSeries fiona=new TimeSeries(fiona);
  TimeSeries bromon=new TimeSeries(bromon);
  CurveVo cv=null;
  //遍歷Fiona的數據集填充fiona對象
  
  for(int i=;i<dataOfFionasize();i++)
  {
  cv=(CurveVo)dataOfFionaget(i);
  fionaadd(new TimeSeriesDataItem(new Day(cvgetDay()cvgetMonth()cvgetYear()) new Double(cvgetCent())));
  
  }
  resultaddSeries(fiona);
  for(int i=;i<dataOfBromonsize();i++)
  {
  cv=(CurveVo)dataOfBromonget(i);
  bromonadd(new TimeSeriesDataItem(new Day(cvgetDay()cvgetMonth()cvgetYear())new Double(cvgetCent())));
  
  }
  resultaddSeries(bromon);
  }
  //生成圖表的方法圖表數據來自上面的getData方法
  
  public String draw(int yint m)
  {
  String result=null;
  String title=Bromon & Fiona的愛情走勢圖;
  String subTitle=y++m+;
  String domain=時間;//x軸
  String range=分值;//y軸
  TimeSeriesCollection data =thisgetData(ym);
  JFreeChart chart =ChartFactorycreateTimeSeriesChart(titledomainrangedatatruetruefalse);
  TextTitle subtitle =new TextTitle(subTitle new Font(宋體 FontBOLD ));
  chartaddSubtitle(subtitle);
  chartsetTitle(new TextTitle(title new Font(宋體 FontITALIC )));
  chartsetBackgroundPaint(new GradientPaint( Colorwhite Colorwhite));
  csetTime(new Date());
  String fileName=c:\\pics\\+y++m+jpg;//保存為位置
  try
  {
  File f=new File(c:\\pics);
  if(!fexists())
  {
  fmkdir();
  }
  ChartUtilitiessaveChartAsJPEG(new File(fileName) chart );//寬
  } catch (Exception e)
  {
  eprintStackTrace();
  }
  result=fileName;
  return result;
  }
  
  //ok測試一下
  
  public static void main(String args[])
  {
  new DrawPic()draw();
  }
  }
  
  生成環比柱狀圖的相關內容整理後放出
  
  JfreeChart的繪圖功能很強大但是API的編寫有些地方讓人很不舒服很多元素要定制不容易如果有更好的API的話我很願意使用當然免費是個很重要的前提
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19686.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.