`

JfreeChart学习

阅读更多
自己最近学习了JfreeChart的使用,觉得这个冬冬的功能非常强大,总结一下。主要介绍JfreeChart生成图片的几种方式

先从网上找点介绍。
一、简介
    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代码 复制代码
  1. public class PieChartPicture {   
  2. public static void main(String[] args)    
  3. {   
  4.  PieDataset dataset = getDataSet();   
  5.  JFreeChart chart = ChartFactory.createPieChart3D(   
  6.     " 项目进度分布"// chart title   
  7.     dataset,// data   
  8.     true,// include legend   
  9.     true,   
  10.     false  
  11.    );   
  12.   PiePlot3D  plot=(PiePlot3D)chart.getPlot();   
  13.     // 图片中显示百分比:默认方式   
  14.     //plot.setLabelGenerator(new           StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));   
  15. // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位   
  16.  plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));    
  17. // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例                   
  18.  plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));    
  19. // 设置背景色为白色    
  20. chart.setBackgroundPaint(Color.white);    
  21. // 指定图片的透明度(0.0-1.0)    
  22.  plot.setForegroundAlpha(1.0f);    
  23. // 指定显示的饼图上圆形(false)还椭圆形(true)    
  24. plot.setCircular(true);    
  25. // 设置图标题的字体    
  26. Font font = new Font(" 黑体",Font.CENTER_BASELINE,20);    
  27. TextTitle title = new TextTitle(" 项目状态分布");    
  28. title.setFont(font);     
  29. chart.setTitle(title);    
  30. FileOutputStream fos_jpg = null;    
  31. try {    
  32.      fos_jpg=new FileOutputStream("D:\\ 项目状态分布.jpg");    
  33.      ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);    
  34.      fos_jpg.close();    
  35. catch (Exception e) {    
  36.  }    
  37. }    
  38. private static PieDataset getDataSet() {    
  39. DefaultPieDataset dataset = new DefaultPieDataset();    
  40. dataset.setValue(" 市场前期"new Double(10));    
  41. dataset.setValue(" 立项"new Double(15));    
  42. dataset.setValue(" 计划"new Double(10));    
  43. dataset.setValue(" 需求与设计"new Double(10));    
  44. dataset.setValue(" 执行控制"new Double(35));    
  45. dataset.setValue(" 收尾"new Double(10));    
  46. dataset.setValue(" 运维",new Double(10));    
  47. return dataset;           
  48. }   
  49. }   
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;        
}
} 


2) 采用servlet和struts的action方式输出
采用这种方式输出,不用生成图片。
A .servlet输出
Java代码 复制代码
  1. public class PieByServlet extends HttpServlet{    
  2. public void service(ServletRequest req, ServletResponse res)    
  3. throws ServletException, IOException    
  4. {    
  5.    res.setContentType("image/jpeg");    
  6.    PieDataset dataset = getDataSet();    
  7.    JFreeChart chart = ChartFactory.createPieChart3D(    
  8.    " 水果饼图"// chart title    
  9.    dataset,// data    
  10.    true// include legend    
  11.    true,    
  12.    false );    
  13.    //设置图表属性   
  14. // 输出图片    
  15.  ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,800,600,null);    
  16. }   
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代码 复制代码
  1. try{          
  2. ChartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null);    
  3.  } catch (Exception e) {    
  4. }   
  5. 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代码 复制代码
  1. public class ChartViewer extends HttpServlet {    
  2. public void init() throws ServletException {   
  3. }    
  4. //Process the HTTP Get request   
  5. public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {    
  6. // get the chart from session   
  7. HttpSession session = request.getSession();    
  8. BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage");    
  9. // set the content type so the browser can see this as a picture    
  10. response.setContentType("image/png");    
  11. // send the picture    
  12. PngEncoder encoder = new PngEncoder(chartImage, false09);    
  13. response.getOutputStream().write(encoder.pngEncode());   
  14. }    
  15. //Process the HTTP Post request    
  16. public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {    
  17. doGet(request, response);    
  18. }    
  19. //Process the HTTP Put request    
  20. public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
  21. }    
  22. //Clean up resources    
  23. public void destroy() { }    
  24. }   
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() { } 
} 


2. Create a servlet map in web.xml
Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <web-app>    
  3.  <servlet>    
  4.  <servlet-name>ChartViewer</servlet-name>    
  5.  <servlet-class>myapp.webwork.servlets.ChartViewer</servlet-class>    
  6. </servlet>    
  7. <servlet-mapping>    
  8. <servlet-name>ChartViewer</servlet-name>    
  9. <url-pattern>/servlet/ChartViewer</url-pattern>    
  10. </servlet-mapping>    
  11. </web-app>   
<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 
 <servlet> 
 <servlet-name>ChartViewer</servlet-name> 
 <servlet-class>myapp.webwork.servlets.ChartViewer</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>ChartViewer</servlet-name> 
<url-pattern>/servlet/ChartViewer</url-pattern> 
</servlet-mapping> 
</web-app> 


3. Create a chart in a java bean (Pie3DDemo.java)

Java代码 复制代码
  1. public class Pie3DDemo {    
  2. private DefaultPieDataset getDataset() {    
  3. // categories...    
  4. String[] section = new String[] { "Jan","Feb","Mar","Apr","May","Jun""Jul","Aug","Sep","Oct","Nov","Dec" };    
  5. // data...    
  6. double[] data = new double[section.length];    
  7.  for (int i = 0; i < data.length; i++) {    
  8.      data[i] = 10 + (Math.random() * 10);    
  9. }    
  10. // create the dataset...    
  11. DefaultPieDataset dataset = new DefaultPieDataset();    
  12. for (int i = 0; i < data.length; i++) {    
  13.        dataset.setValue(section[i], data[i]);    
  14. }    
  15. return dataset;    
  16. }    
  17. public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {    
  18.  DefaultPieDataset dataset = getDataset();    
  19. // create the chart...    
  20.  JFreeChart chart = ChartFactory.createPie3DChart(    
  21.   "Pie3D Chart Demo",  // chart title    
  22.   dataset,             // data    
  23.   true,                // include legend    
  24.   true,    
  25.   false    
  26.  );    
  27. // set the background color for the chart...    
  28. chart.setBackgroundPaint(Color.cyan);    
  29. PiePlot plot = (PiePlot) chart.getPlot();    
  30. plot.setNoDataMessage("No data available");    
  31. // set drilldown capability...    
  32.  plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section"));    
  33. plot.setLabelGenerator(null);    
  34. // OPTIONAL CUSTOMISATION COMPLETED.    
  35. ChartRenderingInfo info = null;    
  36. HttpSession session = request.getSession();    
  37. try {    
  38. //Create RenderingInfo object    
  39.  response.setContentType("text/html");    
  40.  info = new ChartRenderingInfo(new StandardEntityCollection());    
  41.  BufferedImage chartImage = chart.createBufferedImage(640400, info);    
  42. // putting chart as BufferedImage in session,    
  43. // thus making it available for the image reading action Action.    
  44. session.setAttribute("chartImage", chartImage);    
  45. PrintWriter writer = new PrintWriter(response.getWriter());    
  46. ChartUtilities.writeImageMap(writer, "imageMap", info);    
  47. writer.flush();    
  48. catch (Exception e) { }    
  49.   
  50. String pathInfo = "http://";    
  51. pathInfo += request.getServerName();    
  52. int port = request.getServerPort();    
  53. pathInfo += ":"+String.valueOf(port);    
  54. pathInfo += request.getContextPath();    
  55. String chartViewer = pathInfo + "/servlet/ChartViewer";    
  56. return chartViewer;    
  57. }   
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; 
} 


6. 页面
Java代码 复制代码
  1.     
  2. <html>    
  3. <head>    
  4. <title>Pie Chart Demo</title>    
  5. </head>    
  6. <jsp:useBeanid="myChart"scope="session"class="myapp.webwork.beans.Pie3DDemo" />    
  7. <body>    
  8. <h2>Pie Chart Demo</h2>    
  9. <%String chartViewer = myChart.getChartViewer(request, response);%>    
  10. <img src="<%=chartViewer%>" border=0 usemap="#imageMap">    
  11. </body>    
  12. </html>   
 
<html> 
<head> 
<title>Pie Chart Demo</title> 
</head> 
<jsp:useBeanid="myChart"scope="session"class="myapp.webwork.beans.Pie3DDemo" /> 
<body> 
<h2>Pie Chart Demo</h2> 
<%String chartViewer = myChart.getChartViewer(request, response);%> 
<img src="<%=chartViewer%>" border=0 usemap="#imageMap"> 
</body> 
</html> 


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

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

1 .添加工具类ChartUtil
public class ChartUtil {
//  产生时间序列图,返回图片名称
Java代码 复制代码
  1. public  static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {    
  2.   
  3. String filename = null;    
  4.  try {    
  5.  if (session != null)    
  6.  {    
  7. ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");    
  8.  session.removeAttribute("JFreeChart_Deleter");    
  9.  session.setAttribute("JFreeChart_Deleter", deleter);    
  10. }    
  11. JFreeChart chart = ChartFactory.createPieChart3D(    
  12. title,  // chart title    
  13. dataset, // data    
  14. true,  // include legend    
  15. true,    
  16. false );    
  17. //  Write the chart image to the temporary directory    
  18. ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());    
  19. //If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.    
  20. //If the last parameter is a session object, the chart remains until session time out.    
  21. filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);    
  22. //  Write the image map to the PrintWriter    
  23.  ChartUtilities.writeImageMap(pw, filename, info,true);    
  24.  pw.flush();    
  25. catch (Exception e) {    
  26.  System.out.println("Exception - " + e.toString());    
  27.  e.printStackTrace(System.out);    
  28.  filename = "picture_error.png"; }    
  29. return filename;    
  30. }    
  31. }   
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代码 复制代码
  1. String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,nullnew PrintWriter(out));    
  2. 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代码 复制代码
  1. <td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>  
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>


4、在web.xml中添加
Java代码 复制代码
  1. <servlet>   
  2.   <servlet-name>DisplayChart</servlet-name>   
  3.   <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>   
  4. </servlet>   
  5. <servlet-mapping>   
  6.     <servlet-name>DisplayChart</servlet-name>   
  7.     <url-pattern>/servlet/DisplayChart</url-pattern>   
  8. </servlet-mapping>  
<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>


5) ApplicationFrame 方式
Java代码 复制代码
  1. public class PieChartDemo1 extends ApplicationFrame {    
  2. public PieChartDemo1(String title) {    
  3. super(title);    
  4. setContentPane(createDemoPanel());    
  5. }    
  6. private static JFreeChart createChart(PieDataset dataset) {    
  7. JFreeChart chart = ChartFactory.createPieChart(    
  8. .......   
  9. return chart;    
  10. }    
  11.   
  12. public static JPanel createDemoPanel() {    
  13. JFreeChart chart = createChart(createDataset());    
  14. return new ChartPanel(chart);    
  15. }    
  16.   
  17. public static void main(String[] args) {    
  18. PieChartDemo1 demo = new PieChartDemo1("Pie Chart Demo 1");    
  19. demo.pack();    
  20. RefineryUtilities.centerFrameOnScreen(demo);    
  21. demo.setVisible(true);    
  22. }    
  23. }   
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); 
} 
} 


六. 可参考资料与网址

官方网站

[url]http://www.jfree.org/jfreechart/index.html [/url]

官方论坛

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

API 文档

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

中文API

[url]http://blog.sina.com.cn/u/405da78d010000ap [/url]

好了,唠叨了这么多,自己写了一些,从网上找了一些,真tmd的很累啊。

分享到:
评论

相关推荐

    JFreeChart学习文档

    **JFreeChart学习文档** **一、JFreeChart简介** JFreeChart是一个强大的Java图表库,它能够生成各种类型的高质量图表,包括折线图、柱状图、饼图、散点图、甘特图以及时间序列图表等。这个库广泛应用于数据分析、...

    JFreeChart学习资料.doc

    这份学习资料是针对 JFreeChart 的使用进行讲解,主要涵盖了如何在 Web 项目中集成 JFreeChart 以及创建不同类型的图表。 1. **Web 项目集成**: 在一个标准的 Web 项目中,为了展示 JFreeChart 生成的图表,我们...

    JFreeChart学习资料大全

    这个“JFreeChart学习资料大全”压缩包包含了丰富的资源,旨在帮助开发者深入理解和熟练运用JFreeChart。 首先,了解JFreeChart的基本概念至关重要。JFreeChart库提供了一组类和接口,用于构建和定制图表。它支持...

    Jfreechart学习笔记3-简单Line图形创建

    在本篇“JFreeChart学习笔记3-简单Line图形创建”中,我们将深入探讨如何使用JFreeChart库在Java环境中创建基本的线性图表。JFreeChart是一个强大的、开源的Java图表库,它允许开发者轻松地生成各种类型的图表,包括...

    jFreeChart学习操作的全部资源

    **jFreeChart学习资源概述** jFreeChart是一个强大的开源Java库,用于生成高质量的图表,包括线图、柱状图、饼图、散点图、甘特图等多种类型的图表。这个资源包包含了学习jFreeChart所需的所有关键元素,包括jar...

    JfreeChart学习总结JfreeChart学习总结

    JfreeChart学习总结JfreeChart学习总结

    jFreeChart学习总结

    ### JFreeChart学习总结 #### 一、为什么学习JFreeChart? 随着互联网技术的飞速发展,越来越多的应用程序转向了Web平台。这不仅包括传统的静态网页,也涵盖了那些需要复杂数据展示的应用,如报表系统。然而,从...

    Jfreechart学习一

    博文链接:https://yangwei.iteye.com/blog/114734

    JFreeChart学习

    《JFreeChart学习指南——深度探索数据可视化》 在数据科学和数据分析领域,有效的数据可视化是至关重要的。JFreeChart,作为一个强大的Java图表库,为我们提供了丰富的图表类型,包括柱状图、饼状图和曲线图等,...

    JFreeChart学习总结,包括一些基本资料和例子

    **JFreeChart学习指南** JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件、Applet或Web应用中创建各种复杂的图表。这个库涵盖了多种图表类型,包括柱状图、饼图、线图、散点图、甘特图等,...

    JfreeChart学习总结 整理中。。。

    **JFreeChart学习总结** JFreeChart是一款强大的Java图表库,它允许开发者在Java应用程序、Swing组件或Web应用中创建各种复杂的图表。这个库涵盖了多种图表类型,包括折线图、柱状图、饼图、散点图、甘特图等,能够...

    Jfreechart学习笔记1-简单Pie图形创建

    **JFreeChart学习笔记1 - 简单Pie图创建** 在Java开发中,我们经常需要展示数据,而饼图(Pie Chart)是一种常见的数据可视化工具,尤其适用于展示各项比例关系。JFreeChart是一个强大的开源Java图表库,它提供了...

    jfreechart学习笔记

    《JFreeChart学习详解》 JFreeChart是一个强大的Java库,用于生成高质量的图表,包括折线图、柱状图、饼图、散点图等多种类型。它在各种应用程序中广泛应用,尤其适合于Web应用程序中数据可视化的实现。本文将通过...

    jfreechart学习示例

    **JFreeChart学习示例** JFreeChart是一个强大的开源Java库,用于生成各种高质量的2D图表,包括柱状图、饼图、线图、散点图等。它广泛应用于数据可视化,尤其在报告和仪表板开发中。本示例将帮助你了解如何在Java...

    jfreechart学习资料

    这个"jfreechart学习资料"压缩包包含了学习JFreeChart所需的关键资源,包括库本身、示例代码以及相关的学习文档。 在学习JFreeChart时,首先需要了解其基本概念和架构。JFreeChart的核心是`ChartFactory`类,它提供...

    jfreechart中文学习文档

    ### jfreechart中文学习文档 #### 一、引言 ##### 1.1 JFreeChart 是什么? **1.1.1 概览** JFreeChart 是一款为 Java 平台设计的免费图表库。这款工具非常适合在各种 Java 应用程序、Applet 和 Servlet 中使用...

    Jfreechart学习二

    **JFreeChart学习二** 在Java编程环境中,创建可视化图表是一项常见的任务,而JFreeChart库就是这样的一个强大工具,它允许开发者轻松地生成各种高质量的2D图表,包括饼图、柱状图、线图、散点图、甘特图等。本篇...

    JFreeChart学习资料(精心收集)

    JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的高质量图表,包括柱状图、饼图、线图、散点图、面积...通过深入学习和实践,你可以充分利用JFreeChart的潜力,提升你的应用程序或项目的数据可视化能力。

    Jfreechart学习资源

    **JFreeChart 学习资源详解** 在Java编程中,数据可视化是一个重要的方面,它能够帮助我们以图形的形式直观地展示复杂的数据。JFreeChart是一个强大的开源库,专门用于生成高质量的2D图表,适用于各种Java应用程序...

Global site tag (gtag.js) - Google Analytics