读书人

应用 JFreeChart 来创建基于 web 的图

发布时间: 2012-11-08 08:48:12 作者: rapoo

使用 JFreeChart 来创建基于 web 的图表
应用 JFreeChart 来创建基于 web 的图表应用 JFreeChart 来创建基于 web 的图表应用 JFreeChart 来创建基于 web 的图表应用 JFreeChart 来创建基于 web 的图表 平均分 (共 12 个评分 )



图 2
应用 JFreeChart 来创建基于 web 的图表

图 3
应用 JFreeChart 来创建基于 web 的图表

上面的三个图都是表示四个季度的某个产品的销量信息。在继续下面小节之前必须先准备好开发环境,因为是基于 WEB 浏览器的图表展现,因此需要一个 Servlet 引擎或者是 J2EE 应用服务器(例如 WebSphere,Tomcat 等)。WEB 环境的搭建就不累赘了,读者根据喜好自行安装。JFreeChart 引擎本身需要到 SourceForge.net 上下载,地址如下:

如果是使用简单的数据即使用 getDataSet 方法获取数据集时产生的图片文件如下:


图 5
应用 JFreeChart 来创建基于 web 的图表

?

由此就产生了一个问题:如果根据一个图像来生成对应的 MAP 对象。我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是 ChartFactory. createBarChart3D 方法中的最后两个参数,这两个参数的类型都是布尔值。这两个参数意思分别是:是否创建工具提示 (tooltip) 以及是否生成 URL。这两个参数分别对应着 MAP 中一个 AREA 的 title 属性以及 href 属性。

可是我想知道的是怎么来产生这个 MAP 啊!哈哈,不要着急,JFreeChart 已经帮我们做好生成 MAP 对象的功能。为了生成 MAP 对象就要引入另外一个对象:ChartRenderingInfo。因为 JFreeChart 没有直接的方法利用一个图表对象直接生成 MAP 数据,它需要一个中间对象来过渡,这个对象就是 ChartRenderingInfo。下图是生成 MAP 数据的流程图:


图 7
应用 JFreeChart 来创建基于 web 的图表

如上图所示,ChartUtilities 类是整个流程的核心,它周围的对象都是一些例如数据对象或者是文件等。这个流程简单描述如下:首先创建一个 ChartRenderingInfo 对象并在调用 ChartUtilities 的 writeChartAsJPEG 时作为最后一个参数传递进去。调用该方法结束后将产生一个图像文件以及一个填充好 MAP 数据的 ChartRenderingInfo 对象,有了这个对象我们还是没有办法获取具体的 MAP 数据,我们还必须借助于 ChartUtilities 的 writeImageMap 方法来将 ChartRenderingInfo 对象读取出来,获取 MAP 数据的代码片断如下:

 PrintWriter w = null;  FileOutputStream fos_jpg = null;  FileOutputStream fos_cri = null;  try{  // 根据不同类型的图表使用不同类,以下是针对饼图的操作 PiePlot plot = (PiePlot) chart.getPlot();  plot.setURLGenerator(new StandardPieURLGenerator(url));  // 设置工具提示   plot.setToolTipGenerator(new StandardPieToolTipGenerator());  fos_jpg = new FileOutputStream(“d:\\fruit.jpg”);  ChartUtilities.writeChartAsJPEG(  fos_jpg,  100,  chart,  400,  300,  info);  fos_cri = new FileOutputStream(__d:\\fruit.map__);  w = new PrintWriter(fos_cri);  ChartUtilities.writeImageMap(w, __mapname__, info);  w.flush();  }finally{  try{  w.close();  }catch(Exception e){}  try{  fos_cri.close();  }catch(Exception e){}  try{  fos_jpg.close();  }catch(Exception e){}  } 

?

打开文件 D:\fruit.map,文件的内容就是要写到页面上的 MAP 数据。把生成的图像文件以及 MAP 数据文件写到页面上即可完成热点图表的功能。至于怎么结合两者之间的关系例如图像的 useMap 属性值必须与 MAP 对象的名称结合起来,必须根据实际的应用情况进行相应的处理。笔者建议把二者通过标签库封装起来,图像文件的名称以及 MAP 对象的名称由标签库统一进行控制,这样可以保证二者的一致性。

?

参考资料

JFreeChart 图表引擎首页

Cewolf 自定义图表标签库

关于作者

刘冬,他已经不再叫凤梨罐头了。珠海市创我科技发展有限公司软件工程师,主要从事在J2EE平台上实现商业智能(BI)方面的开发。
联系电话:0756-3377435-383
电子邮件: winter.lau@163.com

读书人网 >Web前端

热点推荐