JFreeChart教程,自学java后端JFreeChart

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

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

二、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文件,在其中加入如下代码: 
Java代码  
1.  
2.    DisplayChart  
3.    org.jfree.chart.servlet.DisplayChart  
4.  
5.  
6.    DisplayChart  
7.    /servlet/DisplayChart  
8.  
                至此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) 
1、pie charts,代码如下 
Java代码  
1.package demo;  
2.  
3.import org.jfree.chart.JFreeChart;  
4.import org.jfree.chart.ChartFactory;  
5.import org.jfree.chart.ChartFrame;  
6.import org.jfree.data.general.DefaultPieDataset;  
7.  
8.public class FirstJFreeChart {  
9.   public FirstJFreeChart() {  
10.   }  
11.    
12.   public static void main(String[] args){  
13.     DefaultPieDataset dpd = new DefaultPieDataset();  
14.     dpd.setValue(“管理人员”,25);  
15.     dpd.setValue(“市场人员”,25);  
16.     dpd.setValue(“开发人员”,45);  
17.     dpd.setValue(“其他人员”,5);  
18.      
19.     //Create JFreeChart object  
20.     //参数可以查看源码  
21.     JFreeChart pieChart = ChartFactory.createPieChart(“CityInfoPort公司组织架构图”,dpd,true,true,false);  
22.     ChartFrame pieFrame = new ChartFrame(“CityInfoPort公司组织架构图”,pieChart);  
23.     pieFrame.pack();  
24.     pieFrame.setVisible(true);  
25.   }  
26.}

上面例子可以进一步改进,如下: 
Java代码  
1.package com.cityinforport.demo;  
2.  
3.import org.jfree.chart.JFreeChart;  
4.import org.jfree.chart.ChartPanel;  
5.import org.jfree.chart.ChartFactory;  
6.import org.jfree.chart.ChartFrame;  
7.import org.jfree.data.general.DefaultPieDataset;  
8.import org.jfree.chart.plot.PiePlot;  
9.import org.jfree.data.general.PieDataset;  
10.import org.jfree.ui.ApplicationFrame;  
11.import org.jfree.ui.RefineryUtilities;  
12.import java.awt.Font;  
13.import javax.swing.*;  
14.  
15.  
16.public class FirstJFreeChart extends ApplicationFrame {  
17.   //构造函数  
18.   public FirstJFreeChart(String s){  
19.     super(s);  
20.     setContentPane(createDemoPanel());  
21.   }  
22.    
23.   public static void main(String[] args){  
24.     FirstJFreeChart fjc = new FirstJFreeChart(“CityInfoPort公司组织架构图”);  
25.     fjc.pack();  
26.     RefineryUtilities.centerFrameOnScreen(fjc);  
27.     fjc.setVisible(true);  
28.   }  
29.    
30.   //生成饼图数据集对象  
31.   public static PieDataset createDataset(){  
32.     DefaultPieDataset defaultpiedataset = new DefaultPieDataset();  
33.     defaultpiedataset.setValue(“管理人员”,10.02D);  
34.     defaultpiedataset.setValue(“市场人员”,20.23D);  
35.     defaultpiedataset.setValue(“开发人员”,60.02D);  
36.     defaultpiedataset.setValue(“OEM人员”,10.02D);  
37.     defaultpiedataset.setValue(“其他人员”,5.11D);  
38.      
39.     return defaultpiedataset;  
40.   }  
41.    
42.   //生成图表主对象JFreeChart  
43.   public static JFreeChart createChart(PieDataset piedataset){  
44.     //定义图表对象  
45.     JFreeChart jfreechart = ChartFactory.createPieChart(“CityInfoPort公司组织架构图”,piedataset,true,true,false);  
46.     //获得图表显示对象  
47.     PiePlot pieplot = (PiePlot)jfreechart.getPlot();  
48.     //设置图表标签字体  
49.     pieplot.setLabelFont(new Font(“SansSerif”,Font.BOLD,12));  
50.     pieplot.setNoDataMessage(“No data available”);  
51.     pieplot.setCircular(true);  
52.     pieplot.setLabelGap(0.01D);//间距  
53.      
54.     return jfreechart;  
55.   }  
56.    
57.   //生成显示图表的面板  
58.   public static JPanel createDemoPanel(){  
59.     JFreeChart jfreechart = createChart(createDataset());  
60.     return new ChartPanel(jfreechart);  
61.   }  
62.    
63.}

一、简介 
WW 的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用 HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。回到本文的题目上来,为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二 种就是直接在web服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式 只适合一些局域网的应用,而对于因特网的环境就显得不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。 
JFreeChart 项目简介 JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普 通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。

二、JFreeChart获取。 
JFreeChart 是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下: 
1.JFreeReport :报表解决工具 
2.JFreeChart:Java 图形解决方案(Application/Applet/Servlet/Jsp) 
3.JCommon :JFreeReport和JFreeChart的公共类库 
4.JFreeDesigner :JFreeReport的报表设计工具 
我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取), 
获取地址:http://www.jfree.org/jfreechart/index.html(同时可以获得简明介绍) 
我们以当前最新版本:jfreechart-1.0.1.zip为例子进行说明。

三、JFreeChart配置安装 
1 、解压jfreechart-1.0.1.zip.zip到指定位置,其中source是jfreechart的源码,jfreechart-1.0.1-demo.jar 是例子程序,可以先运行一下看看各种效果,就知道他的nb之处了。 
2 、为了配置成功,我们需要关注的文件有如下三个: 
设置classpath。加入下面三个jar包。 
jfreechart-1.0.1.jar 、jcommon-1.0.0.jar、gnujaxp.jar 
加上第三个jar包有时web.xml会报错,把它去掉就好了。 
至此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可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码,最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多上社区.

五.开始开发 
对JfreeChart有了初步了解并做好准备工作之后,开始作例子程序试验。在这里我只介绍饼图的做法,而这张图采用不同的方式进行输出,其他类型的图片可以参考jfreechart提供的例子,做法都差不多。

1) 直接生成图片 
Java代码 
public class PieChartPicture { 
public static void main(String[] args) 

PieDataset dataset = getDataSet(); 
JFreeChart chart = ChartFactory.createPieChart3D( 
" 项目进度分布", // chart title 
dataset,// data 
true,// include legend 
true, 
false 
); 
PiePlot3D plot=(PiePlot3D)chart.getPlot(); 
// 图片中显示百分比:默认方式 
//plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT)); 
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位 
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat(“0.00%”))); 
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})")); 
// 设置背景色为白色 
chart.setBackgroundPaint(Color.white); 
// 指定图片的透明度(0.0-1.0) 
plot.setForegroundAlpha(1.0f); 
// 指定显示的饼图上圆形(false)还椭圆形(true) 
plot.setCircular(true); 
// 设置图标题的字体 
Font font = new Font(" 黑体",Font.CENTER_BASELINE,20); 
TextTitle title = new TextTitle(" 项目状态分布"); 
title.setFont(font); 
chart.setTitle(title); 
FileOutputStream fos_jpg = null; 
try { 
fos_jpg=new FileOutputStream(“D:\ 项目状态分布.jpg”); 
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null); 
fos_jpg.close(); 
} catch (Exception e) { 


private static PieDataset getDataSet() { 
DefaultPieDataset dataset = new DefaultPieDataset(); 
dataset.setValue(" 市场前期", new Double(10)); 
dataset.setValue(" 立项", new Double(15)); 
dataset.setValue(" 计划", new Double(10)); 
dataset.setValue(" 需求与设计", new Double(10)); 
dataset.setValue(" 执行控制", new Double(35)); 
dataset.setValue(" 收尾", new Double(10)); 
dataset.setValue(" 运维",new Double(10)); 
return dataset; 

}

public class PieChartPicture { 
public static void main(String[] args) 

PieDataset dataset = getDataSet(); 
JFreeChart chart = ChartFactory.createPieChart3D( 
" 项目进度分布", // chart title 
dataset,// data 
true,// include legend 
true, 
false 
); 
PiePlot3D plot=(PiePlot3D)chart.getPlot(); 
// 图片中显示百分比:默认方式 
//plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT)); 
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位 
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat(“0.00%”))); 
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})")); 
// 设置背景色为白色 
chart.setBackgroundPaint(Color.white); 
// 指定图片的透明度(0.0-1.0) 
plot.setForegroundAlpha(1.0f); 
// 指定显示的饼图上圆形(false)还椭圆形(true) 
plot.setCircular(true); 
// 设置图标题的字体 
Font font = new Font(" 黑体",Font.CENTER_BASELINE,20); 
TextTitle title = new TextTitle(" 项目状态分布"); 
title.setFont(font); 
chart.setTitle(title); 
FileOutputStream fos_jpg = null; 
try { 
fos_jpg=new FileOutputStream(“D:\ 项目状态分布.jpg”); 
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null); 
fos_jpg.close(); 
} catch (Exception e) { 


private static PieDataset getDataSet() { 
DefaultPieDataset dataset = new DefaultPieDataset(); 
dataset.setValue(" 市场前期", new Double(10)); 
dataset.setValue(" 立项", new Double(15)); 
dataset.setValue(" 计划", new Double(10)); 
dataset.setValue(" 需求与设计", new Double(10)); 
dataset.setValue(" 执行控制", new Double(35)); 
dataset.setValue(" 收尾", new Double(10)); 
dataset.setValue(" 运维",new Double(10)); 
return dataset; 

}

  1. 采用servlet和struts的action方式输出 
    采用这种方式输出,不用生成图片。 
    A .servlet输出 
    Java代码 
    public class PieByServlet extends HttpServlet{ 
    public void service(ServletRequest req, ServletResponse res) 
    throws ServletException, IOException 

    res.setContentType(“image/jpeg”); 
    PieDataset dataset = getDataSet(); 
    JFreeChart chart = ChartFactory.createPieChart3D( 
    " 水果饼图", // chart title 
    dataset,// data 
    true, // include legend 
    true, 
    false ); 
    //设置图表属性 
    // 输出图片 
    ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,800,600,null); 
    }

public class PieByServlet extends HttpServlet{ 
public void service(ServletRequest req, ServletResponse res) 
throws ServletException, IOException 

res.setContentType(“image/jpeg”); 
PieDataset dataset = getDataSet(); 
JFreeChart chart = ChartFactory.createPieChart3D( 
" 水果饼图", // chart title 
dataset,// data 
true, // include legend 
true, 
false ); 
//设置图表属性 
// 输出图片 
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,800,600,null); 

B .struts的action方式输出 
只将这条语句加上try catch即可,并返回null。 
Java代码 
try{ 
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null); 
} catch (Exception e) { 

return null;

try{ 
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null); 
} catch (Exception e) { 

return null;

其实采用这两种方式与生成图片的方式改动并不大 
加上语句response.setContentType(“image/jpeg”); 
ChartUtilities.writeChartAsJPEG(new FileOutputStream(“D:\ 项目状态分布.jpg”);,100,chart,640,480,null); 
文件流改成response的输出流就可以了 
hartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null);

3)jsp+servlet+javabean方式

  1. Create ChartViewer servlet 
    Java代码 
    public class ChartViewer extends HttpServlet { 
    public void init() throws ServletException { 

    //Process the HTTP Get request 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // get the chart from session 
    HttpSession session = request.getSession(); 
    BufferedImage chartImage = (BufferedImage) session.getAttribute(“chartImage”); 
    // set the content type so the browser can see this as a picture 
    response.setContentType(“image/png”); 
    // send the picture 
    PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9); 
    response.getOutputStream().write(encoder.pngEncode()); 

    //Process the HTTP Post request 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    doGet(request, response); 

    //Process the HTTP Put request 
    public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    //Clean up resources 
    public void destroy() { } 
    }

public class ChartViewer extends HttpServlet { 
public void init() throws ServletException { 

//Process the HTTP Get request 
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
// get the chart from session 
HttpSession session = request.getSession(); 
BufferedImage chartImage = (BufferedImage) session.getAttribute(“chartImage”); 
// set the content type so the browser can see this as a picture 
response.setContentType(“image/png”); 
// send the picture 
PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9); 
response.getOutputStream().write(encoder.pngEncode()); 

//Process the HTTP Post request 
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
doGet(request, response); 

//Process the HTTP Put request 
public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

//Clean up resources 
public void destroy() { } 
}

  1. Create a servlet map in web.xml 
    Java代码
<?xml version="1.0" encoding="UTF-8"?>      ChartViewer  myapp.webwork.servlets.ChartViewer      ChartViewer  /servlet/ChartViewer      <?xml version="1.0" encoding="UTF-8"?>      ChartViewer  myapp.webwork.servlets.ChartViewer      ChartViewer  /servlet/ChartViewer     
  1. Create a chart in a java bean (Pie3DDemo.java)

Java代码 
public class Pie3DDemo { 
private DefaultPieDataset getDataset() { 
// categories… 
String[] section = new String[] { “Jan”,“Feb”,“Mar”,“Apr”,“May”,“Jun”, “Jul”,“Aug”,“Sep”,“Oct”,“Nov”,“Dec” }; 
// data… 
double[] data = new double[section.length]; 
for (int i = 0; i < data.length; i++) { 
data[i] = 10 + (Math.random() * 10); 

// create the dataset… 
DefaultPieDataset dataset = new DefaultPieDataset(); 
for (int i = 0; i < data.length; i++) { 
dataset.setValue(section[i], data[i]); 

return dataset; 

public String getChartViewer(HttpServletRequest request, HttpServletResponse response) { 
DefaultPieDataset dataset = getDataset(); 
// create the chart… 
JFreeChart chart = ChartFactory.createPie3DChart( 
“Pie3D Chart Demo”, // chart title 
dataset, // data 
true, // include legend 
true, 
false 
); 
// set the background color for the chart… 
chart.setBackgroundPaint(Color.cyan); 
PiePlot plot = (PiePlot) chart.getPlot(); 
plot.setNoDataMessage(“No data available”); 
// set drilldown capability… 
plot.setURLGenerator(new StandardPieURLGenerator(“Bar3DDemo.jsp”,“section”)); 
plot.setLabelGenerator(null); 
// OPTIONAL CUSTOMISATION COMPLETED. 
ChartRenderingInfo info = null; 
HttpSession session = request.getSession(); 
try { 
//Create RenderingInfo object 
response.setContentType(“text/html”); 
info = new ChartRenderingInfo(new StandardEntityCollection()); 
BufferedImage chartImage = chart.createBufferedImage(640, 400, info); 
// putting chart as BufferedImage in session, 
// thus making it available for the image reading action Action. 
session.setAttribute(“chartImage”, chartImage); 
PrintWriter writer = new PrintWriter(response.getWriter()); 
ChartUtilities.writeImageMap(writer, “imageMap”, info); 
writer.flush(); 
} catch (Exception e) { }

String pathInfo = “http://”; 
pathInfo += request.getServerName(); 
int port = request.getServerPort(); 
pathInfo += “:”+String.valueOf(port); 
pathInfo += request.getContextPath(); 
String chartViewer = pathInfo + “/servlet/ChartViewer”; 
return chartViewer; 
}

public class Pie3DDemo { 
private DefaultPieDataset getDataset() { 
// categories… 
String[] section = new String[] { “Jan”,“Feb”,“Mar”,“Apr”,“May”,“Jun”, “Jul”,“Aug”,“Sep”,“Oct”,“Nov”,“Dec” }; 
// data… 
double[] data = new double[section.length]; 
for (int i = 0; i < data.length; i++) { 
data[i] = 10 + (Math.random() * 10); 

// create the dataset… 
DefaultPieDataset dataset = new DefaultPieDataset(); 
for (int i = 0; i < data.length; i++) { 
dataset.setValue(section[i], data[i]); 

return dataset; 

public String getChartViewer(HttpServletRequest request, HttpServletResponse response) { 
DefaultPieDataset dataset = getDataset(); 
// create the chart… 
JFreeChart chart = ChartFactory.createPie3DChart( 
“Pie3D Chart Demo”, // chart title 
dataset, // data 
true, // include legend 
true, 
false 
); 
// set the background color for the chart… 
chart.setBackgroundPaint(Color.cyan); 
PiePlot plot = (PiePlot) chart.getPlot(); 
plot.setNoDataMessage(“No data available”); 
// set drilldown capability… 
plot.setURLGenerator(new StandardPieURLGenerator(“Bar3DDemo.jsp”,“section”)); 
plot.setLabelGenerator(null); 
// OPTIONAL CUSTOMISATION COMPLETED. 
ChartRenderingInfo info = null; 
HttpSession session = request.getSession(); 
try { 
//Create RenderingInfo object 
response.setContentType(“text/html”); 
info = new ChartRenderingInfo(new StandardEntityCollection()); 
BufferedImage chartImage = chart.createBufferedImage(640, 400, info); 
// putting chart as BufferedImage in session, 
// thus making it available for the image reading action Action. 
session.setAttribute(“chartImage”, chartImage); 
PrintWriter writer = new PrintWriter(response.getWriter()); 
ChartUtilities.writeImageMap(writer, “imageMap”, info); 
writer.flush(); 
} catch (Exception e) { }

String pathInfo = “http://”; 
pathInfo += request.getServerName(); 
int port = request.getServerPort(); 
pathInfo += “:”+String.valueOf(port); 
pathInfo += request.getContextPath(); 
String chartViewer = pathInfo + “/servlet/ChartViewer”; 
return chartViewer; 
}

  1. 页面 
    Java代码
    Pie Chart Demo        Pie Chart Demo   

4)采用工具类ChartUtil和DisplayChart(jfreechart的servlet)输出 
我用了上面的几个方法输出图片,发现页面里只能输出一个图片, 
不过下面的方法可以输出多个图片,而且是几种方式中最简单的一个,推荐使用。

这种方式和上面的三种比较类似,是将javabean里的生成图片的方法写的一个工具类ChartUtil里面。

1 .添加工具类ChartUtil 
public class ChartUtil { 
// 产生时间序列图,返回图片名称 
Java代码 
public static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {

String filename = null; 
try { 
if (session != null) 

ChartDeleter deleter = (ChartDeleter)session.getAttribute(“JFreeChart_Deleter”); 
session.removeAttribute(“JFreeChart_Deleter”); 
session.setAttribute(“JFreeChart_Deleter”, deleter); 

JFreeChart chart = ChartFactory.createPieChart3D( 
title, // chart title 
dataset, // data 
true, // include legend 
true, 
false ); 
// Write the chart image to the temporary directory 
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); 
//If the last parameter is null, the chart is a “one time”-chart and will be deleted after the first serving. 
//If the last parameter is a session object, the chart remains until session time out. 
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session); 
// Write the image map to the PrintWriter 
ChartUtilities.writeImageMap(pw, filename, info,true); 
pw.flush(); 
} catch (Exception e) { 
System.out.println("Exception - " + e.toString()); 
e.printStackTrace(System.out); 
filename = “picture_error.png”; } 
return filename; 

}

public static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {

String filename = null; 
try { 
if (session != null) 

ChartDeleter deleter = (ChartDeleter)session.getAttribute(“JFreeChart_Deleter”); 
session.removeAttribute(“JFreeChart_Deleter”); 
session.setAttribute(“JFreeChart_Deleter”, deleter); 

JFreeChart chart = ChartFactory.createPieChart3D( 
title, // chart title 
dataset, // data 
true, // include legend 
true, 
false ); 
// Write the chart image to the temporary directory 
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); 
//If the last parameter is null, the chart is a “one time”-chart and will be deleted after the first serving. 
//If the last parameter is a session object, the chart remains until session time out. 
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session); 
// Write the image map to the PrintWriter 
ChartUtilities.writeImageMap(pw, filename, info,true); 
pw.flush(); 
} catch (Exception e) { 
System.out.println("Exception - " + e.toString()); 
e.printStackTrace(System.out); 
filename = “picture_error.png”; } 
return filename; 

}

2、在action里统计数据,设置好数据集dataset。传到页面

3、 在页面里取出 
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute(“piedataset”); 
// 用ChartUtil工具类产生图片 
Java代码 
String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out)); 
String p1 = request.getContextPath() + “/servlet/DisplayChart?filename=” + p;

String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out)); 
String p1 = request.getContextPath() + “/servlet/DisplayChart?filename=” + p; 
通过以下方式输出 
Java代码

   

4、在web.xml中添加 
Java代码 
 
DisplayChart 
org.jfree.chart.servlet.DisplayChart 
 
 
DisplayChart 
/servlet/DisplayChart 

  DisplayChart  org.jfree.chart.servlet.DisplayChart      DisplayChart  /servlet/DisplayChart   

5) ApplicationFrame 方式 
Java代码 
public class PieChartDemo1 extends ApplicationFrame { 
public PieChartDemo1(String title) { 
super(title); 
setContentPane(createDemoPanel()); 

private static JFreeChart createChart(PieDataset dataset) { 
JFreeChart chart = ChartFactory.createPieChart( 
… 
return chart; 
}

public static JPanel createDemoPanel() { 
JFreeChart chart = createChart(createDataset()); 
return new ChartPanel(chart); 
}

public static void main(String[] args) { 
PieChartDemo1 demo = new PieChartDemo1(“Pie Chart Demo 1”); 
demo.pack(); 
RefineryUtilities.centerFrameOnScreen(demo); 
demo.setVisible(true); 

}

public class PieChartDemo1 extends ApplicationFrame { 
public PieChartDemo1(String title) { 
super(title); 
setContentPane(createDemoPanel()); 

private static JFreeChart createChart(PieDataset dataset) { 
JFreeChart chart = ChartFactory.createPieChart( 
… 
return chart; 
}

public static JPanel createDemoPanel() { 
JFreeChart chart = createChart(createDataset()); 
return new ChartPanel(chart); 
}

public static void main(String[] args) { 
PieChartDemo1 demo = new PieChartDemo1(“Pie Chart Demo 1”); 
demo.pack(); 
RefineryUtilities.centerFrameOnScreen(demo); 
demo.setVisible(true); 

}

六. 可参考资料与网址

官方网站

http://www.jfree.org/jfreechart/index.html

官方论坛

http://www.jfree.org/phpBB2/index.php

API 文档

http://www.jfree.org/jfreechart/api/gjdoc/index.html

中文API

http://blog.sina.com.cn/u/405da78d010000ap

好了,唠叨了这么多,自己写了一些,从网上找了一些,真tmd的很累啊。 
14:53 浏览 (15463) 评论 (2) 分类: open source 相关推荐 评论 
yanyanlong 2008-06-16 
第一个例子的 第33行

ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);

改成: 
ChartUtilities.writeChartAsJPEG(fos_jpg,1,chart,640,480,null);

就可以了

一、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中加入
       如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:
       把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,在其中加入如下代码:
                
                    DisplayChart
                    org.jfree.chart.servlet.DisplayChart
                
                
                    DisplayChart
                    /servlet/DisplayChart
                
               至此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;

显示效果:

先引入相关的jar包:
    jcommon-1.0.12.jar     jfreechart-1.0.9.jar     struts2-jfreechart-plugin-2.1.6.jar
Jfreecharaction.java代码  
1.package com.example.struts.action;  
2.import jfreeChart.JfreeChartTest;  
3.  
4.import org.jfree.chart.JFreeChart;  
5.  
6.import com.opensymphony.xwork2.ActionSupport;  
7.  
8.@SuppressWarnings(“serial”)  
9.public class JfreeCharAction extends ActionSupport {  
10.  
11.    /**  
12.     * 定义JFreeChart对象 大家请注意在这里JFreeChart对象名只能为chart   
13.     * 不能是别的   
14.     * 关于这点  
15.     * 大家可以上struts2网站上面查看一下  
16.     *   
17.     * http://struts.apache.org/2.x/docs/jfreechart-plugin.html  
18.     /  
19.    private JFreeChart chart;  
20.  
21.    public JFreeChart getChart() {  
22.        return chart;  
23.    }  
24.  
25.    public void setChart(JFreeChart chart) {  
26.        this.chart = chart;  
27.    }  
28.  
29.    @Override  
30.    public String execute() throws Exception {  
31.        // 调用方法  
32.        this.chart = JfreeChartTest.createChart();  
33.        return SUCCESS;  
34.    }  
35.}  
 
Jfreecharttest.java代码  
1.package jfreeChart;  
2.  
3.import java.awt.Font;  
4.import java.io.IOException;  
5.  
6.import org.jfree.chart.ChartFactory;  
7.import org.jfree.chart.JFreeChart;  
8.import org.jfree.chart.plot.PiePlot;  
9.import org.jfree.data.general.DefaultPieDataset;  
10.  
11.public class JfreeChartTest {  
12.  
13.    public static JFreeChart createChart() throws IOException {  
14.        // 数据集  
15.        DefaultPieDataset dpd = new DefaultPieDataset();  
16.        dpd.setValue(“管理人员”, 25);  
17.        dpd.setValue(“市场人员”, 25);  
18.        dpd.setValue(“开发人员”, 45);  
19.        dpd.setValue(“其它人员”, 10);  
20.        // 创建PieChart对象  
21.        JFreeChart chart = ChartFactory.createPieChart3D(“某公司人员组织结构图”, dpd,  
22.                true, true, false);  
23.        utils.setFont(chart);  
24.        return chart;  
25.    }  
26.}  
27.  
28./
*  
29. * 设置字体  
30. *   
31. * @author zyong  
32. *   
33. */  
34.class utils {  
35.    public static void setFont(JFreeChart chart) {  
36.        Font font = new Font(“宋体”, Font.ITALIC, 12);  
37.        PiePlot plot = (PiePlot) chart.getPlot();  
38.        chart.getTitle().setFont(font);  
39.        plot.setLabelFont(font);  
40.        chart.getLegend().setItemFont(font);  
41.    }  
42.}  
 
Struts.xml代码  
1.  
2.       
8.      
9.          
10.              
11.                600  
12.                400  
13.              
14.          
15.      
16.  
 
Struts2_29_JFreeChart_.rar (9.4 KB)
下载次数: 580
查看图片附件

在 Web 中嵌入图形图表的技术越来越丰富,我们可以选择 JavaScript 库,CSS,Flash,Silverlight,PHP 库,服务器端的组件,也可以选择 Google Chart API 这样的 Web 服务。本文介绍了25个在 Web 中嵌入图形图表的免费资源。
 
JS Charts (基于 JavaScript 的图表生成工具)

Protovis (可视化 javaScript 图表生成工具)

Visifire (基于 Silverlight 和 WPF 的开源图表组件)

pChart (PHP图表类库框架)

Ejschart (Javascript)

XML/SWF Charts

Chronoscope (开源)

Open Flash Chart 2

FusionCharts Free

JFreeChart (flash)

Flare (Flash ActionScript 库)

Google Chart API

Google Chart Generator

Timeplot (基于 DHTML 的 AJAX 饰件)

CSS Chart Generator (基于 CSS 的即时 Web 图表生成)

YUI Library

PlotKit (JavaScript 图表库)

Flotr (基于 Prototype框架的图表类库)

Rapha?l (JavaScript library)

Protochart (开源类库,基于 Prototype 和 Canvas)

Bluff (Rubby 下的 Gruff 图表类库的 JavaScript 移植)

Pure Css Line Graph (纯粹基于 CSS 的线形图)

Pure Css Data Chart

CSS Stacked Bar Graphs

Illustrator tutorial

JFreeChart介绍及经典入门资料 (1)

/Title:JFreeChart入门指南
//Author:谢莫锋 Email:yyxmf111@sogou.com  QQ:35814522
//=====================================================================
一、JFreeChart获取。
        JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下:
        1、JFreeReport:报表解决工具
        2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)
        3、JCommon:JFreeReport和JFreeChart的公共类库
        4、JFreeDesigner:JFreeReport的报表设计工具

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

二、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文件,在其中加入如下代码:
                
                    DisplayChart
                    org.jfree.chart.servlet.DisplayChart
                
                
                    DisplayChart
                    /servlet/DisplayChart
                
               至此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介绍及经典入门资料 (2)
 
发布时间:2006.05.10 05:02      来源:赛迪博客     作者:itzealot

四、JFreeChart开发(Application/Applet)
1、pie charts,代码如下
/**
 * Description:This application is the first jfreechart
 * authort:谢莫锋
 * Datetime:20058-02-11
 */
package demo;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.data.general.DefaultPieDataset;

public class FirstJFreeChart {
  public FirstJFreeChart() {
  }
  
  public static void main(String[] args){
    DefaultPieDataset dpd = new DefaultPieDataset();
    dpd.setValue(“管理人员”,25);
    dpd.setValue(“市场人员”,25);
    dpd.setValue(“开发人员”,45);
    dpd.setValue(“其他人员”,5);
    
    //Create JFreeChart object
    //参数可以查看源码
    JFreeChart pieChart = ChartFactory.createPieChart(“CityInfoPort公司组织架构图”,dpd,true,true,false);
    ChartFrame pieFrame = new ChartFrame(“CityInfoPort公司组织架构图”,pieChart);
    pieFrame.pack();
    pieFrame.setVisible(true);
  }
}

上面例子可以进一步改进,如下:
/**
 * Description:This application is the first jfreechart
 * authort:谢莫锋
 * Datetime:20058-02-11
 */
package com.cityinforport.demo;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import java.awt.Font;
import javax.swing.*;

public class FirstJFreeChart extends ApplicationFrame {
  //构造函数
  public FirstJFreeChart(String s){
    super(s);
    setContentPane(createDemoPanel());
  }
  
  public static void main(String[] args){
    FirstJFreeChart fjc = new FirstJFreeChart(“CityInfoPort公司组织架构图”);
    fjc.pack();
    RefineryUtilities.centerFrameOnScreen(fjc);
    fjc.setVisible(true);
  }
  
  //生成饼图数据集对象
  public static PieDataset createDataset(){
    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;
  }
  
  //生成图表主对象JFreeChart
  public static JFreeChart createChart(PieDataset piedataset){
    //定义图表对象
    JFreeChart jfreechart = ChartFactory.createPieChart(“CityInfoPort公司组织架构图”,piedataset,true,true,false);
    //获得图表显示对象
    PiePlot pieplot = (PiePlot)jfreechart.getPlot();
    //设置图表标签字体
    pieplot.setLabelFont(new Font(“SansSerif”,Font.BOLD,12));
    pieplot.setNoDataMessage(“No data available”);
    pieplot.setCircular(true);
    pieplot.setLabelGap(0.01D);//间距
    
    return jfreechart;
  }
  
  //生成显示图表的面板
  public static JPanel createDemoPanel(){
    JFreeChart jfreechart = createChart(createDataset());
    return new ChartPanel(jfreechart);
  }
  
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值