JfreeChart学习总结_第1页
JfreeChart学习总结_第2页
JfreeChart学习总结_第3页
JfreeChart学习总结_第4页
JfreeChart学习总结_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JfreeChart学习总结 关键字: jfreechart 自己最近学习了JfreeChart的使用,觉得这个冬冬的功能非常强大,总结一下。主要介绍JfreeChart生成图片的几种方式 先从网上找点介绍。 一、简介     WW 的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这 两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用 HTML以及图片的方式来展现数据,而传统的一些利用操作

2、系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。回到本文 的题目上来,为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二 种就是直接在web服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式 只适合一些局域网的应用,而对于因特网的环境就显得不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。     JFreeChart 项目简介

3、JFreeChart是开放源代码站点上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普 通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。 二、JFreeChart获取。          JFreeChart 是JFreeChart公司在开源网站上的一个项目,该公司的主要产品有如下:          1.JFreeReport :

4、报表解决工具          2.JFreeChart:Java 图形解决方案(Application/Applet/Servlet/Jsp)          3.JCommon :JFreeReport和JFreeChart的公共类库          4.JFreeDesigner :JFreeReport的报表设计工具   &#

5、160;  我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),      获取地址:(同时可以获得简明介绍)      我们以当前最新版本:jfreechart-1.0.1.zip为例子进行说明。 三、JFreeChart配置安装      1 、解压jfreechart-1.0.1.zip.zip到指定位置,其中source是jfreechart的源码,jfreechart-1.0.1-demo.jar&

6、#160;  是例子程序,可以先运行一下看看各种效果,就知道他的nb之处了。     2 、为了配置成功,我们需要关注的文件有如下三个:     设置classpath。加入下面三个jar包。     jfreechart-1.0.1.jar 、jcommon-1.0.0.jar、gnujaxp.jar     加上第三个jar包有时web.xml会报错,把它去掉就好了。         至此jf

7、reechart的配置就完成了,下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类         结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。如果是中文显示的时候可能依据观感需要改变源码的字体。 四、JFreeChart功能介绍      JFreeChart 目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求,主要包括如下几个方面:    

8、60; pie   charts   (2D   and   3D) :饼图(平面和立体)      bar   charts   (regular   and   stacked,   with   an   optional   3D   effect) :柱状图   

9、60;  line   and   area   charts :曲线图      scatter   plots   and   bubble   charts      time   series,   high/low/open/close   charts   and &

10、#160; candle   stick   charts :时序图      combination   charts :复合图      Pareto   charts      Gantt   charts :甘特图      wind   plots,   meter  

11、 charts   and   symbol   charts      wafer   map   charts      ( 态图表,饼图(二维和三维)   ,   柱状图   ( 水平,垂直),线图,点图,时间变化图,甘特图,   股票行情图,混和图,   温度计图,   刻度图等常用商用图表

12、)      图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联      JFreeChart 核心类库介绍:              研究jfreechart源码发现源码的主要由两个大的包组成:org.jfree.chart,org.jfree.data。其中前者主要与图形      本身有关,后者与图形显示的数据有关。具体研究如果

13、大家有兴趣的话可以自己研究    。           核心类主要有:             org.jfree.chart.JFreeChart :图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象       &

14、#160;     tegory.XXXDataSet: 数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类             org.jfree.chart.plot.XXXPlot :图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持         

15、60;   org.jfree.chart.axis.XXXAxis :用于处理图表的两个轴:纵轴和横轴             org.jfree.chart.render.XXXRender :负责如何显示一个图表对象             org.jfree.chart.urls.XXXURLGenerator: 用于生成Web图表中每个项目的鼠标点

16、击链接             XXXXXToolTipGenerator: 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类     个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的不够好,特别是使用中文的时候字体很不清晰。因为这个原因建 议你自己去修改他的源代码,最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多上社区. 五开始开发   &

17、#160; 对JfreeChart有了初步了解并做好准备工作之后,开始作例子程序试验。在这里我只介绍饼图的做法,而这张图采用不同的方式进行输出,其他类型的图片可以参考jfreechart提供的例子,做法都差不多。 1) 直接生成图片 Java代码 1. public class PieChartPicture   2. public static void main(String args)   3.   4.  PieDataset 

18、dataset = getDataSet();  5.  JFreeChart chart = ChartFactory.createPieChart3D(  6.     " 项目进度分布", / chart title  7.     dataset,/ data  8.   

19、0; true,/ include legend  9.     true,  10.     false  11.    );  12.   PiePlot3D  plot=(PiePlot3D)chart.getPlot();  13.     / 图片中显示百分比

20、:默认方式  14.     /plot.setLabelGenerator(new           StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT);  15. / 图片中显示百分比:自定义方式,0 表示选项, 1 表示数值, 2&#

21、160;表示所占比例 ,小数点后两位  16.  plot.setLabelGenerator(new StandardPieSectionLabelGenerator("0=1(2)", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%");   17. / 图例显示百分比:自定义方式, 0 表示选项, 1 表示数值, 

22、;2 表示所占比例                  18.  plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("0=1(2)");   19. / 设置背景色为白色   20. chart.setBackgroun

23、dPaint(Color.white);   21. / 指定图片的透明度(0.0-1.0)   22.  plot.setForegroundAlpha(1.0f);   23. / 指定显示的饼图上圆形(false)还椭圆形(true)   24. plot.setCircular(true);   25. / 设置图标题的字体   26. Font font&#

24、160;= new Font(" 黑体",Font.CENTER_BASELINE,20);   27. TextTitle title = new TextTitle(" 项目状态分布");   28. title.setFont(font);    29. chart.setTitle(title);   30.  fos_jpg&#

25、160;= null;   31. try    32.      fos_jpg=new ("D: 项目状态分布.jpg");   33.      ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);   34.   &

26、#160;  fos_jpg.close();   35.  catch (Exception e)    36.     37.    38. private static PieDataset getDataSet()    39. DefaultPieDataset dataset = new 

27、;DefaultPieDataset();   40. dataset.setValue(" 市场前期", new Double(10);   41. dataset.setValue(" 立项", new Double(15);   42. dataset.setValue(" 计划", new Double(10);   4

28、3. dataset.setValue(" 需求与设计", new Double(10);   44. dataset.setValue(" 执行控制", new Double(35);   45. dataset.setValue(" 收尾", new Double(10);   46. dataset.setValue(" 运维&qu

29、ot;,new Double(10);   47. return dataset;          48.   49.    public class PieChartPicture public static void main(String args) PieDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.cre

30、atePieChart3D( " 项目进度分布", / chart title dataset,/ data true,/ include legend true, false ); PiePlot3D plot=(PiePlot3D)chart.getPlot(); / 图片中显示百分比:默认方式 /plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT);/ 图片中显示百分比:自定义方式,0 表示选项, 1

31、 表示数值, 2 表示所占比例 ,小数点后两位 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("0=1(2)", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"); / 图例显示百分比:自定义方式, 0 表示选项, 1 表示数值, 2 表示所占比例 plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("0=1(2)&quo

32、t;); / 设置背景色为白色 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.setFon

33、t(font); chart.setTitle(title); fos_jpg = null; try fos_jpg=new ("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.setVa

34、lue(" 市场前期", 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); datase

35、t.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)

36、   3. throws ServletException, IOException   4.    5.    res.setContentType("image/jpeg");   6.    PieDataset dataset = getDataSet();   7.    JFr

37、eeChart chart = ChartFactory.createPieChart3D(   8.    " 水果饼图", / chart title   9.    dataset,/ data   10.    true, / include legend  &

38、#160;11.    true,   12.    false );   13.    /设置图表属性  14. / 输出图片   15.  ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,800,600,null);   16.   &

39、#160;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( " 水果饼图", / c

40、hart 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.writeChar

41、tAsJPEG(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 (Excepti

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

43、etjavabean方式 1. Create ChartViewer servlet Java代码 1. public class ChartViewer extends HttpServlet    2. public void init() throws ServletException   3.    4. /Process the HTTP Get request

44、60; 5. public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException    6. / get the chart from session  7. HttpSession session =

45、0;request.getSession();   8. BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage");   9. / set the content type so the browser can see this as a pictur

46、e   10. response.setContentType("image/png");   11. / send the picture   12. PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9);   13. response.getOutputStream().write(en

47、coder.pngEncode();  14.    15. /Process the HTTP Post request   16. public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException  &

48、#160; 17. doGet(request, response);   18.    19. /Process the HTTP Put request   20. public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, 

49、;IOException    21.    22. /Clean up resources   23. public void destroy()     24.    public class ChartViewer extends HttpServlet public void init() throws ServletException /Process the HTT

50、P Get requestpublic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException / get the chart from sessionHttpSession session = request.getSession(); BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage"); / set the con

51、tent 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(HttpServletReque

52、st 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

53、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.  <ser

54、vlet-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

55、>   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.

56、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

57、0;class Pie3DDemo    2. private DefaultPieDataset getDataset()    3. / categories.   4. String section = new String  "Jan","Feb","Mar","Apr","May"

58、;,"Jun", "Jul","Aug","Sep","Oct","Nov","Dec"    5. / data.   6. double data = new doublesection.length;   7.  for (int i = 0;

59、 i < data.length; i+)    8.      datai = 10 + (Math.random() * 10);   9.    10. / create the dataset.   11. DefaultPieDataset dataset

60、0;= new DefaultPieDataset();   12. for (int i = 0; i < data.length; i+)    13.        dataset.setValue(sectioni, datai);   14.    15. return&#

61、160;dataset;   16.    17. public String getChartViewer(HttpServletRequest request, HttpServletResponse response)    18.  DefaultPieDataset dataset = getDataset();   19. / create th

62、e chart.   20.  JFreeChart chart = ChartFactory.createPie3DChart(   21.   "Pie3D Chart Demo",  / chart title   22.   dataset,       

63、60;     / data   23.   true,                / include legend   24.   true,   25.   false   

64、;26.  );   27. / set the background color for the chart.   28. chart.setBackgroundPaint(Color.cyan);   29. PiePlot plot = (PiePlot) chart.getPlot();   30. plot.setNoDataMessage(&qu

65、ot;No data available");   31. / set drilldown capability.   32.  plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section");   33. plot.setLabelGenerator(null);   

66、34. / OPTIONAL CUSTOMISATION COMPLETED.   35. ChartRenderingInfo info = null;   36. HttpSession session = request.getSession();   37. try    38. /Create RenderingInfo object &

67、#160; 39.  response.setContentType("text/html");   40.  info = new ChartRenderingInfo(new StandardEntityCollection();   41.  BufferedImage chartImage = chart.createBufferedImage(640, 400, info);&

68、#160;  42. / putting chart as BufferedImage in session,   43. / thus making it available for the image reading action Action.   44. session.setAttribute("chartImage",

69、0;chartImage);   45. PrintWriter writer = new PrintWriter(response.getWriter();   46. ChartUtilities.writeImageMap(writer, "imageMap", info);   47. writer.flush();   48.  catch (Exception

70、60;e)     49.   50. String pathInfo = "http:/"   51. pathInfo += request.getServerName();   52. int port = request.getServerPort();   53. pathInfo += ":&qu

71、ot;+String.valueOf(port);   54. pathInfo += request.getContextPath();   55. String chartViewer = pathInfo + "/servlet/ChartViewer"   56. return chartViewer;   57.    public cl

72、ass Pie3DDemo private DefaultPieDataset getDataset() / categories. String section = new String "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" ; / data. do

73、uble data = new doublesection.length; for (int i = 0; i < data.length; i+) datai = 10 + (Math.random() * 10); / create the dataset. DefaultPieDataset dataset = new DefaultPieDataset(); for (int i = 0; i < data.length; i+) dataset.setValue(sectioni, datai); return dataset; public String getChar

74、tViewer(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 col

75、or 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(

76、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.creat

77、eBufferedImage(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, "

78、;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 + "/servl

79、et/ChartViewer" return chartViewer; 6. 页面 Java代码 1.    2. <html>   3. <head>   4. <title>Pie Chart Demo</title>   5. </head>   6. <jsp:useBeanid="myChart"scope="s

80、ession"class="myapp.webwork.beans.Pie3DDemo" />   7. <body>   8. <h2>Pie Chart Demo</h2>   9. <%String chartViewer = myChart.getChartViewer(request, response);%>   

81、;10. <img src="<%=chartViewer%>" border=0 usemap="#imageMap">   11. </body>   12. </html>    <html> <head> <title>Pie Chart Demo</title> </head> <jsp:useBeanid=&qu

82、ot;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&quo

83、t;> </body> </html> 4)采用工具类ChartUtil和DisplayChart(jfreechart的servlet)输出 我用了上面的几个方法输出图片,发现页面里只能输出一个图片, 不过下面的方法可以输出多个图片,而且是几种方式中最简单的一个,推荐使用。 这种方式和上面的三种比较类似,是将javabean里的生成图片的方法写的一个工具类ChartUtil里面。 1 添加工具类ChartUtil public class ChartUtil /  产生时间序列图,返回图片名称 Java代码 1. public  s

84、tatic String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw)    2.   3. String  = null;   4.  try    5.  if (session !=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论