JFreeChart简单介绍

来源:互联网 发布:公主的名字 知乎 编辑:程序博客网 时间:2024/06/05 19:22

一、JFreeChart获取。 
        JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下: 
        1、JFreeReport:报表解决工具 
        2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp) 
        3、JCommon:JFreeReport和JFreeChart的公共类库 
        4、JFreeDesigner:JFreeReport的报表设计工具

   我们可以从jfree官方网站上获取最新版本(最新的版本是1.0.5)和相关资料(但是jfree的Developer Guides是需要花美金才能获取), 
    获取地址:http://www.jfree.org/jfreechart/index.html(同时可以获得简明介绍) 
    我们以当前版本:jfreechart-1.0.0-rc3.tar.gz为例子进行说明

二、JFreeChart配置安装 
    1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21- demo.jar 
       是例子程序(该部分留给大家自己去研究) 
    2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、 
       lib\gnujaxp.jar 
    3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入 
二、JFreeChart配置安装 
    1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21- demo.jar 
       是例子程序(该部分留给大家自己去研究) 
    2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、 
       lib\gnujaxp.jar 
    3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入 
       如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明: 
       把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,在其中加入如下代码: 
                <servlet> 
                    <servlet-name>DisplayChart</servlet-name> 
                    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class> 
                </servlet> 
                <servlet-mapping> 
                    <servlet-name>DisplayChart</servlet-name> 
                    <url-pattern>/servlet/DisplayChart</url-pattern> 
                </servlet-mapping> 
               至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类 
       结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。如果 
       是中文显示的时候可能依据观感需要改变源码的字体,不过我个人觉得这个版本比以前版本要好一些。

三、JFreeChart功能介绍 
    JFreeChart目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求,主要包括如下几个方面: 
    pie charts (2D and 3D):饼图(平面和立体) 
    bar charts (regular and stacked, with an optional 3D effect):柱状图 
    line and area charts:曲线图 
    scatter plots and bubble charts 
    time series, high/low/open/close charts and candle stick charts:时序图 
    combination charts:复合图 
    Pareto charts 
    Gantt charts:甘特图 
    wind plots, meter charts and symbol charts 
    wafer map charts 
    (态图表,饼图(二维和三维) , 柱状图 (水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表) 
    图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联 
    JFreeChart核心类库介绍: 
            研究jfreechart源码发现源码的主要由两个大的包组成:org.jfree.chart,org.jfree.data。其中前者主要与图形 本身有关,后者与图形显示的数据有关。具体研究如果大家有兴趣的话可以自己研究,以后有时间我会告诉大家怎么去研究源码。 
         核心类主要有: 
           org.jfree.chart.JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart 引擎本身提供了一个工厂类用于创建不同类型的图表对象 
           org.jfree.data.category.XXXDataSet:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类 
           org.jfree.chart.plot.XXXPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、 Renderer以及数据集对象的支持 
           org.jfree.chart.axis.XXXAxis:用于处理图表的两个轴:纵轴和横轴 
           org.jfree.chart.render.XXXRender:负责如何显示一个图表对象 
           org.jfree.chart.urls.XXXURLGenerator:用于生成Web图表中每个项目的鼠标点击链接 
           XXXXXToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类 
    四、JFreeChart开发(Application/Applet)

one: pie charts

/**

* JfreeChartTest.java

* author:longlong

* May 31, 2007

*/

package com.ghg.java;

import org.jfree.data.general.DefaultPieDataset;

import org.jfree.chart.*;

public class JfreeChartTest {

    public static void main(String[] args) {

       //创建饼图数据对象

       DefaultPieDataset dfp=new DefaultPieDataset();

       dfp.setValue("管理人员", 25);

       dfp.setValue("市场人员", 35);

       dfp.setValue("开发人员", 20);

       dfp.setValue("后勤人员", 5);

       dfp.setValue("财务人员", 15);

        //Create JFreeChart object

       JFreeChart a =ChartFactory.createPieChart("CityInfoPort公司组织架构图",dfp, true, true, true);

       ChartFrame  frame=new ChartFrame ("CityInfoPort公司组织架构图 ",a,true);

       frame.pack();

       frame.setVisible(true);

}

}

Refactor one

/**

* JfreeChartOne.java

* author:longlong

* May 31, 2007

*/

package com.ghg.java;

import java.awt.Font;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PiePlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

import org.jfree.data.general.DefaultPieDataset;

import org.jfree.data.general.PieDataset;

import org.jfree.ui.ApplicationFrame;

public class JfreeChartOne extends ApplicationFrame {

    private static final long serialVersionUID = 1L;

    public JfreeChartOne(String s)

    {

       super(s);

       setContentPane(createJPanel());

    }

    public static void main(String[] args) {

       JfreeChartOne one=new JfreeChartOne("CityInfoPort公司组织架构图");

       one.pack();

       one.setVisible(true);

    }

    //利用静态方法设定数据源(饼状图)

    public static PieDataset createPieDataset() {

       DefaultPieDataset defaultpiedataset = new DefaultPieDataset();

       defaultpiedataset.setValue("管理人员", 10.02D);

       defaultpiedataset.setValue("市场人员", 20.23D);

       defaultpiedataset.setValue("开发人员", 60.02D);

       defaultpiedataset.setValue("OEM人员", 10.02D);

       defaultpiedataset.setValue("其他人员", 5.11D);

       return defaultpiedataset;

    }

    // 通过ChartFactory创建JFreeChart的实例

    public static JFreeChart createJFreeChart(PieDataset p)

    {

       JFreeChart a =ChartFactory.createPieChart("CityInfoPort公司组织架构图",p, true, true, true);

       PiePlot  pie=(PiePlot )a.getPlot();

       pie.setLabelFont(new Font("SansSerif",Font.BOLD,12));

       pie.setNoDataMessage("No data available");

       pie.setCircular(true);

       pie.setLabelGap(0.01D);//间距

       return a;

    }

    public static JPanel  createJPanel (){

       JFreeChart jfreechart = createJFreeChart(createPieDataset());

       return new ChartPanel(jfreechart);

    }

}

效果如图所示:


two:创建类别图

/**

* JfreeChartTest.java

* author:longlong

* May 31, 2007

*/

package com.ghg.java;

import org.jfree.data.category.DefaultCategoryDataset;

import org.jfree.data.general.DefaultPieDataset;

import org.jfree.chart.*;

import org.jfree.chart.plot.PlotOrientation;

public class JfreeChartTest {

    public static void main(String[] args) {

//     创建类别图(Category)数据对象

       DefaultCategoryDataset dataset = new DefaultCategoryDataset();

       dataset.addValue(100, "北京", "苹果");

       dataset.addValue(100, "上海", "苹果");

       dataset.addValue(100, "广州", "苹果");

       dataset.addValue(200, "北京", "梨子");

       dataset.addValue(200, "上海", "梨子");

       dataset.addValue(200, "广州", "梨子");

       dataset.addValue(300, "北京", "葡萄");

       dataset.addValue(300, "上海", "葡萄");

       dataset.addValue(300, "广州", "葡萄");

       dataset.addValue(400, "北京", "香蕉");

       dataset.addValue(400, "上海", "香蕉");

       dataset.addValue(400, "广州", "香蕉");

       dataset.addValue(500, "北京", "荔枝");

       dataset.addValue(500, "上海", "荔枝");

       dataset.addValue(500, "广州", "荔枝");

       JFreeChart chart=ChartFactory.createBarChart3D("水果产量图", "水果", "水果", dataset, PlotOrientation.VERTICAL, true, true, true);

       ChartFrame  frame=new ChartFrame ("水果产量图 ",chart,true);

       frame.pack();

       frame.setVisible(true);

    }

}

按照one的重构办法也可以对这个程序实现重构。 
  当前位置:主页>技术资讯>JSP编程>文章内容

jFreeChart初探-JSP教程,资料/其他  
来源: 作者: 发布时间:2007-12-27 


//****************************************** 
//*             author:rautinee            * 
//*         email:rautinee@21cn.com        * 
//*         http://www.tryitsoft.com       * 
//*本文可自由传播使用,但请务必保留此信息  * 
//******************************************

jfreechart也许对大家来说很陌生,她是一款免费的、功能强大的统计图生成工具,能够直接生成png,jpg等各式的文档 
为我们java项目的研发增加了一部利器。她的英文简介 
jfreechart is a free java class library for generating charts, including: 
pie charts; 
line charts and horizontal/vertical bar charts (regular and stacked, with optional 3d-effect); 
xy plots and scatter plots; 
time series, high/low/open/close charts and candle stick charts; 
combination charts; 
pareto charts; 
gantt charts; 
bubble charts; 
wind plots, meter charts and symbol charts;

正好我最近的一个项目用到她,于是就很粗略的看了一下,现在把他拿出来和大家分享,希望对大家的工作有所 
帮助。

本文主要是讲解她在jsp上面的应用。例子采用jsp+javabean结构实现

准备工作:首先我们需要什么?当然是jfreechart的package了,能够在她的官方网站上面找到下载链接 
http://www.jfree.org/jfreechart/,把包下下来,配置到tomcat当中,然后能够开始我们的 jfreechart之旅 
了。

下面我要做的是个饼状统计图,首先建立javabean文档

文档名:tryitshow.java

package com.tryit;

import java.io.*; 
import java.awt.insets; 
import java.awt.font; 
import java.io.printwriter; 
import java.text.simpledateformat; 
import java.util.iterator; 
import java.util.locale; 
import java.text.numberformat; 
import javax.servlet.http.httpsession; 
import org.jfree.data.*; 
import org.jfree.chart.*; 
import org.jfree.chart.axis.*; 
import org.jfree.chart.renderer.verticalbarrenderer; 
import org.jfree.chart.renderer.standardxyitemrenderer; 
import org.jfree.chart.plot.*; 
import org.jfree.chart.entity.*; 
import org.jfree.chart.tooltips.*; 
import org.jfree.chart.urls.*; 
import org.jfree.chart.servlet.*; 
import org.jfree.chart.texttitle; 
import java.net.url;

public class tryitshow 
{ 
    public static string generatepiechart(string infostr, string titles,httpsession session, printwriter pw) 
        { 
            string filename = null; 
            font font; 
            
            try { 
                    //  建立piedataset 
            defaultpiedataset data = new defaultpiedataset(); 
            string ss[]=infostr.split(","); 
            for (int n=0;n<ss.length;n++) 
            { 
                string sspart[]=ss[n].split("#"); 
                int tt=integer.parseint(sspart[1]); 
                string mm=sspart[0]; 
                data.setvalue(mm,tt); 
            } 
        
                //  生成chart物件 
            pieplot plot = new pieplot(data); 
            plot.setinsets(new insets(0, 5, 5, 5)); 
        
            plot.settooltipgenerator(new standardpietooltipgenerator()); 
            
            font=new font("黑体",font.center_baseline,20);//这个地方是配置统计图标题的字体和大小 
            
            jfreechart chart = new jfreechart("",jfreechart.default_title_font, plot, true); 
            
            texttitle tt=new texttitle(titles); 
            tt.setfont(font); 
            chart.setbackgroundpaint(java.awt.color.white);//统计图片的底色 
            chart.settitle(tt);

            //  把生成的文档写入到临时的目录中 
            chartrenderinginfo info = new chartrenderinginfo(new standardentitycollection()); 
            filename = servletutilities.savechartaspng(chart, 500, 300, info, session); 
//选择存储成png格式的文档,当然您也能够使用savechartasjpeg的方法生成jpg图片

            //  把image map 写入到 printwriter 
            chartutilities.writeimagemap(pw, filename, info); 
            pw.flush(); 
            } 
            catch (exception ex) { 
            system.out.println("error:"+ex.getmessage()); 
            } 
            return filename; 
            } 
    }


接着是jsp文档 
<%@ page contenttype="text/html;charset=gb2312"%> 
<%@ page import = "com.tryit.tryitshow" %> 
<%@ page import = "java.io.printwriter" %> 
<%@ page import = "java.text.simpledateformat" %> 
<%@ page import = "java.text.parseexception" %> 
<%@ page import = "java.util.arraylist" %> 
<%@ page import = "java.util.date" %> 
<%@ page import = "java.util.iterator" %> 
<%@ page import = "java.util.locale" %> 
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> 
<html> 
<head> 
<title> new document </title> 
<meta name="generator" content="editplus"> 
<meta name="author" content=""> 
<meta name="keywords" content=""> 
<meta name="description" content=""> 
</head> 
<% 
string filename = tryitshow.generatepiechart("本科#100,专科#200","人才学历信息统计",session, new printwriter(out));

    string graphurl = request.getcontextpath() + "/servlet/displaychart?filename=" + filename; 
    %> 
<body> 
<img src="<%= graphurl %>" width=500 height=300 border=0 usemap="#<%= filename %>"> 
</body> 
</html>

ok,大功告成,当然,您能够采用其他方式,比如您能够把dataset的数据配置在xml文档中,从xml文档读取 
统计数据中添加百分比等等,还能够选择生成柱状图、折线图等。

jfreechart更有很多其他的用法,希望大家能够多多交流。


web.xml文档的配置

<web-app> 
  <servlet> 
    <servlet-name>displaychart</servlet-name> 
    <servlet-class>org.jfree.chart.servlet.displaychart</servlet-class> 
  </servlet> 
   <servlet-mapping> 
        <servlet-name>displaychart</servlet-name> 
        <url-pattern>/servlet/displaychart</url-pattern> 
    </servlet-mapping> 
</web-app>

import java.awt.Insets; 
import java.awt.Image; 
import java.io.PrintWriter; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Locale; 
import java.text.NumberFormat; 
import javax.servlet.http.HttpSession; 
import org.jfree.data.*; 
import org.jfree.chart.*; 
import org.jfree.chart.axis.*; 
import org.jfree.chart.renderer.VerticalBarRenderer; 
import org.jfree.chart.renderer.StandardXYItemRenderer; 
import org.jfree.chart.plot.*; 
import org.jfree.chart.entity.*; 
import org.jfree.chart.tooltips.*; 
import org.jfree.chart.urls.*; 
import org.jfree.chart.servlet.*; 
import java.awt.Font;

/** 
* <p>Title: </p> 
* <p>Description: </p> 
* <p>Copyright: Copyright (c) 2003</p> 
* <p>Company: </p> 
* @author jagie 
* @version 1.0 
*/

public class GSPieChart { 
  public static void main(String[] args) { 
    Long[] testData = { 
        new Long(10), new Long(20), new Long(30), new Long(40)}; 
    generatePieChart(testData, "", null, new PrintWriter(System.out), 580, 250); 
  }

  /** 
   * 生成图像文件 
   * @param datas Long[]数组 
   * @param targetUrl 点饼形图上的扇形,定向到的url 
   * @param session httpsession 
   * @param pw PrintWriter 
   * @param w 生成的图的宽度 
   * @param h 生成的图的高度 
   * @return 生成的图像文件的路径 
   */

  public static String generatePieChart(Long[] datas, String targetUrl, 
                                        HttpSession session, PrintWriter pw, 
                                        int w, int h) { 
    String filename = null; 
    try {

      DefaultPieDataset data = new DefaultPieDataset(); 
      data.setValue("正常纳税人", datas[0]); 
      data.setValue("异常纳税人", datas[1]); 
      data.setValue("数据不全纳税人", datas[2]); 
      data.setValue("未处理纳税人", datas[3]);

      //  Create the chart object 
      Pie3DPlot plot = new Pie3DPlot(data); 
      plot.setInsets(new Insets(0, 5, 5, 5)); 
      plot.setForegroundAlpha(0.6f); 
      plot.setSectionLabelType(plot.NO_LABELS);

      plot.setURLGenerator(new StandardPieURLGenerator(targetUrl, "type")); 
      plot.setToolTipGenerator(new StandardPieToolTipGenerator()); 
      JFreeChart chart = new JFreeChart( 
"数据处理结果统计图", JFreeChart.DEFAULT_TITLE_FONT, plot, true); 
      chart.setTitle(new TextTitle( 
"数据处理结果统计图", new Font("黑体", Font.BOLD, 15))); 
      StandardLegend sl = (StandardLegend) chart.getLegend(); 
      sl.setItemFont(new Font("黑体", Font.TRUETYPE_FONT, 12));

      chart.setBackgroundPaint(new java.awt.Color(254, 254, 141));

      //因为jfreechart把生成的png文件保存在系统的临时文件夹中,你需要在适当的  
      //时候调用session.removeAttribute("JFreeChart_Deleter"),这样可以保证png文 
      //件被删除掉

      ChartRenderingInfo info = new ChartRenderingInfo(new 
          StandardEntityCollection()); 
      filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);

      //  Write the image map to the PrintWriter 
      ChartUtilities.writeImageMap(pw, filename, info); 
      pw.flush();

    } 
    catch (Exception e) { 
      System.out.println("Exception - " + e.toString()); 
      e.printStackTrace(System.out); 
      filename = "public_error_500x300.png"; 
    } 
    return filename; 
  } 
} 
.........java代码.................

<%

//以下部分为图象输出 
String targetUrl="../servlet/gov.gwssi.tax.nspg. 
controlservlet.GSMainControlServlet?id="+sid; 
Long[] datas={normals,new Long(totalAbnormal), 
dataLacks,notProcesses}; 
String filename=GSPieChart.generatePieChart 
(datas,targetUrl,session,new PrintWriter(out),580,250); 
String graphURL = request.getContextPath() + 
"/servlet/DisplayChart?filename=" + filename;

%>

JFreeChart Hacking 
来自于http://www.itepub.net/ 
<本文允许任意转载,请注明出处!最后一块骨头.2005-05-16>

JFreeChart 是什么?我就不再重复介绍了,网上文章大把... 
官方主页:http://www.jfree.org/jfreechart/index.html

<--本文以jfreechart-1.0.0-pre2版本为基准-->

那么为什么要Hacking JFreeChart呢?

罪状一:中文Label显示模糊; 
罪状二:无简体中文LocalizationBundle.properties文件; 
罪状三:向下兼容性不好,官方说jdk1.2+,其实是jdk1.4+; 
                兼容问题A:另存菜单输出PNG文件只能运行于jdk1.4+; 
                兼容问题B:另存菜单不能输出JPEG格式图片; 
                兼容问题C:jdk1.3-环境下中文ToolTips不能正常显示;

如果一定要加一条罪状的话:目前开源免费的chart项目无出其右; 
十分感谢JFreeChart开发者的辛苦努力!虽然它现在还不完美。

Ok,下面为Hacking做一些准备工作... 
1.下载jfreechart-1.0.0-pre2.zip解压; 
2.将\解压目录\source\下的源码加入任意project并配置jdk&lib; 
3.安装一个有批量文件查询/替换功能的工具,比如UtralEdit;

<本文允许任意转载,请注明出处!最后一块骨头.2005-05-16>

Hacking Begin

1.解决中文Label显示模糊问题 
  原因分析:JFreeChart默认字体对中文的支持不完善; 
  解决步骤:搜索\解压目录\source\下含有"new Font("的文件; 
           发现JFreeChart默认字体为 
           "foo" 
           "Serif" 
           "Dialog" 
           "SansSerif" 
           "Bitstream Vera Sans" 
           批量替换他们为任意中文字体(推荐"黑体"); 
           当然你也可以把字体写入properties文件, 
           但这里介绍的是最简单的方法; 
           然后重新编译你修改过的文件,Ok,搞定!

2.无简体中文LocalizationBundle.properties文件 
  org\jfree\chart\LocalizationBundle.properties 
  主要用来显示右键功能菜单的文字,下面我们来汉化:

  注意:LocalizationBundle.properties的编码不是Unicode, 
       简体中文要用GBK编码。 
  
  获得GBK编码的方法是: 
  cd ***\j2sdk1.*.*\bin 
  native2ascii -encoding GBK 1.txt 2.txt 
  注:1.txt放中文文本,2.txt输出GBK编码。 
  
# org.jfree.chart.ChartPanel ResourceBundle properties file 
# 
# Changes (from 31-Aug-2003) 
# -------------------------- 
# 31-Aug-2003 : Initial version (AL); 
# 16-May-2005 : Add GBK version (FinalBone); 
# 16-May-2005 : Add JPG_Image_Files (FinalBone);

#---------------EN---------------# 
#Auto_Range=Auto Range 
#All_Axes=Both Axes 
#Chart_Properties=Chart Properties 
#Copy=Copy 
#Print...=Print... 
#Save_as...=Save as... 
#Properties...=Properties... 
#PNG_Image_Files=PNG Image Files 
#JPG_Image_Files=JPG Image Files 
#Domain_Axis=Domain Axis 
#Range_Axis=Range Axis 
#Zoom_In=Zoom In 
#Zoom_Out=Zoom Out

#---------------GBK---------------# 
Auto_Range=\u81ea\u52a8\u8c03\u6574 
All_Axes=\u6240\u6709\u5750\u6807\u8f74 
Chart_Properties=\u56fe\u8868\u5c5e\u6027 
Copy=\u590d\u5236 
Print...=\u6253\u5370... 
Save_as...=\u53e6\u5b58\u4e3a... 
Properties...=\u5c5e\u6027... 
PNG_Image_Files=PNG\u56fe\u50cf 
JPG_Image_Files=JPG\u56fe\u50cf 
Domain_Axis=\u57df\u5750\u6807\u8f74 
Range_Axis=\u503c\u5750\u6807\u8f74 
Zoom_In=\u653e\u5927 
Zoom_Out=\u7f29\u5c0f

另外还有两个同名文件,希望大家有时间也汉化一下。 
org\jfree\chart\ui\LocalizationBundle.properties 
org\jfree\chart\plot\LocalizationBundle.properties

3.兼容性问题 
   a.PNG输出问题 b.无JPEG输出菜单 
    原因分析:javax.imageio.ImageIO这个类只有jdk1.4+才有。 
    解决步骤:1.打开org.jfree.chart.ChartPanel, 
               查看doSaveAs()方法,了解其结构; 
             2.改写doSaveAs()方法,重新编译; 
             3.如果运行环境是jdk1.3- 
               打开org.jfree.chart.encoders.SunPNGEncoderAdapter 
               注释掉javax.imageio.ImageIO,重新编译。


    /** 
     * Updated by FinalBone 2005-5-16 PNG --> JPEG 
     * 
     * Opens a file chooser and gives the user an opportunity 
     * to save the chart in JPEG format. 
     * 
     * @throws IOException if there is an I/O error. 
     */ 
    public void doSaveAs() throws IOException {

        JFileChooser fileChooser = new JFileChooser(); 
        ExtensionFileFilter filter = new ExtensionFileFilter( 
            localizationResources.getString("JPG_Image_Files"), ".jpg" 
        ); 
        fileChooser.addChoosableFileFilter(filter);

        int option = fileChooser.showSaveDialog(this); 
        if (option == JFileChooser.APPROVE_OPTION) { 
            String filename = fileChooser.getSelectedFile().getPath(); 
            if (isEnforceFileExtensions()) { 
                if (!filename.endsWith(".jpg")) { 
                    filename = filename + ".jpg"; 
                } 
            } 
            ChartUtilities.saveChartAsJPEG( 
                new File(filename), this.chart, getWidth(), getHeight() 
            ); 
        }

    }

  c.中文ToolTips不能正常显示(显示为小方框) 
    原因分析:相关字体找不到。 
    解决步骤:1.打开org.jfree.chart.block.LabelBlock 
               查看其构造函数public LabelBlock(String label); 
             2.修改构造函数的字体定义,重新编译。

    /** 
     * Creates a new label block. 
     * 
     * @param label  the label. 
     */ 
    public LabelBlock(String label) { 
         /** 
          * Updated by FinalBone 2005-05-16 
          * "Bitstream Vera Sans" --> "黑体" 
          * For Chinese-Simplified ToolTips 
          * JDK 1.3- Environment 
          */ 
        this(label, new Font("黑体", Font.PLAIN, 11)); 
    }

0 0