首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

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

2012-11-08 
使用 JFreeChart 来创建基于 web 的图表平均分 (共 12 个评分 )图 2图 3上面的三个图都是表示四个季度的某

使用 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

热点排行