选择显示字体大小

使用jfreechart制作图形报表

使用jfreechart制作图形报表

bromon原创 请尊重版权

一、需求分析

  我家领导认为,在是否嫁给我做老婆的问题上,应该有更加科学的决策模型。如果能够将每天的感情生活量化,且以时间为x轴,生成数据报表,就可以为她的决策提供数据支持。秉着以领导意志为导向的基本原则,开发了本软件,为家庭信息化建设提供新的思路。

二、系统概述

  本系统的基本功能是,接收用户每天的输入并保存,月/季度/年度末生成数据折线图、周期环比柱状图。由于投入资金有限(不让我往外掏钱就已经很不错了),所以本软件的1.0版采用单机应用程序,使用access数据库。如果市场推广情况良好,不排除推出大型frp软件(family  resource  project)的可能,届时将包含krm(kin relation manage,家族关系管理)、ha(house automatization,家庭自动化)等模块,利用强大的j2ee框架,为家庭信息化建设提供完整解决方案。

       程序生成的目标图片效果如下:



三、系统要求

1、  开源工具包jfreechart-1.0.0-pre1.jar和它自己要使用的工具包jcommon-1.0.0-pre1.jar

下载地址:http://sourceforge.net/projects/jfreechart/

2、  女朋友一个。

请自行准备,暂不提供下载

下面主要讲述系统是如何从数据库中提取数据,然后生成图形报表的。(终于进入正题了。)

数据表结构:

      

curve_id                流水号                  自动增长

       curve_owner         varchar(30)           区分是老公的数据还是老婆的数据

       curve_cent            double                   当天分数

       curve_year            int                         年

       curve_month         int                         月

       curve_day             int                        日

       note                      text                       备注

       用于封装每个分数的值对象如下:

package org.bromon.fiona.curve.dao;

import java.util.*;

public class curvevo

{

       private  int  year;

       private  int  month;

       private  int  day;

    private  double  cent;

    private  string  note;

private  string  owner;

//get/set方法

………….

}



生成图片的关键代码如下:

package org.bromon.fiona.curve.util;
//一大堆import
public class drawpic

{

       /**

*根据时间查询数据,将所得到的数据封装成timeseriescollection对象

*timeseriescollection是jfreechart中定义的类的对象

*本方法将被后面的draw方法调用

*@param int 要查询哪一年

*@param int 要查询哪一月

*@return timeseriescollection

*/

       public timeseriescollection getdata(int year,int 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=0;i<dataoffiona.size();i++)

{

cv=(curvevo)dataoffiona.get(i);

fiona.add(new timeseriesdataitem(new day(cv.getday(),cv.getmonth(),cv.getyear()), new double(cv.getcent())));

}

result.addseries(fiona);

for(int i=0;i<dataofbromon.size();i++)

{

cv=(curvevo)dataofbromon.get(i);

bromon.add(new timeseriesdataitem(new day(cv.getday(),cv.getmonth(),cv.getyear()),new double(cv.getcent())));

}

result.addseries(bromon);

       }

       //生成图表的方法,图表数据来自上面的getdata方法

       public string draw(int y,int m)

    {

        string result=null;

        string title=&quot;bromon & fiona的爱情走势图&quot;;

        string subtitle=y+&quot;年&quot;+m+&quot;月&quot;;

        string domain=&quot;时间&quot;;//x轴

        string range=&quot;分值&quot;;//y轴

        timeseriescollection data =this.getdata(y,m);

        jfreechart chart =chartfactory.createtimeserieschart(title,domain,range,data,true,true,false);

        texttitle subtitle =new texttitle(subtitle, new font(&quot;宋体&quot;, font.bold, 20));

        chart.addsubtitle(subtitle);

        chart.settitle(new texttitle(title, new font(&quot;宋体&quot;, font.italic, 20)));

        chart.setbackgroundpaint(new gradientpaint(0, 0, color.white, 0, 1000, color.white));

        c.settime(new date());

        string filename=&quot;c:\\pics\\&quot;+y+&quot;&quot;+m+&quot;.jpg&quot;;//保存为位置

        try

        {

            file f=new file(&quot;c:\\pics&quot;);

            if(!f.exists())

            {

                f.mkdir();

            }

            chartutilities.savechartasjpeg(new file(filename), 100, chart, 1000, 600);//宽1000,高600

        } catch (exception e)

        {

            e.printstacktrace();

        }

        result=filename;

        return result;

}


//ok,测试一下

  public static void main(string args[])

  {

      new drawpic().draw(2005,3);

  }

}  生成环比柱状图的相关内容,整理后放出。

  jfreechart的绘图功能很强大,但是api的编写有些地方让人很不舒服,很多元素要定制不容易。如果有更好的api的话,我很愿意使用,当然,免费是个很重要的前提。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons