2008-12-16 18:10
我的编程环境是eclipse3.20+Orcal10g,使用的框架是struts1.2,写log使用的是log4j。
首先,我们必须引入开发所使用的包。网上的介绍都说大部分需要3个包。jcommon-1.0.14.jar和jfreechart-1.0.11.jar,还有另外一个包,可是我在操作中发现,引入上述3个包,我的tomcat在启动时总会出错,与现有的程序包有冲突。后来在同事的帮助下,才发现只要上述前两个包就可以了。将这两个包放入tomcat的lib中,并增加这两个包的环境变量。 修改web.xml,增加相应的servlet。 <servlet> <servlet-name>DisplayChart</servlet-name> <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class> </servlet> <!-- Action Servlet Mapping --> <servlet-mapping> <servlet-name>DisplayChart</servlet-name> <url-pattern>/servlet/DisplayChart</url-pattern> </servlet-mapping> 接下来,我们便可以编写程序了。我的需求是在后台处理完数据后,生成时间金额的一个统计图,然后在web页中显示图片。 JFreeChart可以产生不同类型的统计图,如饼图,折线图,曲线图,柱状图等。它很好的使用了工厂模式,所有这些类型的图都需要相应在工厂ChartFactory中生成出相应的chart对象。而我需要的是下面这个函数 createTimeSeriesChart(java.lang.String title, java.lang.String timeAxisLabel, java.lang.String valueAxisLabel, XYDataset dataset, boolean legend, boolean tooltips, boolean urls) dateset存储了要在图中显示的数据,它是一个数据集合,在折线图中它是所有折线的集合。 TimeSeriesCollection dataset = new TimeSeriesCollection(); // 建立dataset对象 dataset.removeAllSeries();// 删除原来的数据 TimeSeries aLine = new TimeSeries();// 建立一条折线的数据 TimeSeries bLine = new TimeSeries(); // 填充每条折线的数据,略。。。。 dataset.addSeries(aLine); dataset.addSeries(bLine); 至此为止,一个dataset就造好了。 当然,创建JFreeChart对象还有另外一种方法,使用JFreeChart的构造函数,如 public JFreeChart(java.lang.String title, java.awt.Font titleFont, Plot plot, boolean createLegend) 这里需要进行说明的是参数plot,它存储了图形的相关信息,对应于不同类型的图形,它有不同的子类。画折线图可以使用CatigoryPlot类。构造函数如下 CategoryPlot(CategoryDataset dataset, CategoryAxis domainAxis, ValueAxis rangeAxis, CategoryItemRenderer renderer) 上面这两种方式并没有太大的差别,工厂产生的对象已经根据图的类型把相应的参数设置好了,得到对象之后还可以对参数进行修正,不过所做的操作的要少一点。而后面的一种建立方式则要更繁琐一些。 将图形绘制出来,绘制出来的图形存放在session中,通过url进行引用。 ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); fileName = ServletUtilities.saveChartAsJPEG(chart, width, height, info, session); //得到图片的URL map = ChartUtilities.getImageMap("map", info, new StandardToolTipTagFragmentGenerator(), new StandardURLTagFragmentGenerator());//得到这个图片上的map值 在客户端的jsp页面中,需要做的就是引用图片的URL,另外将map值传到前台。 <% String filename = (String) request.getAttribute("fileName"); String graphURL = request.getContextPath()+"/servlet/DisplayChart?filename=" + filename; %> <bean:write name="projectCostDetailForm" property="map" filter="false"/> <img src="<%= graphURL %>" border="0" usemap="#map"/> 上面的filter属性是必不可少的,不然数据就不是写入源source中,而是写入页面了。 这样,整个流程就完成了。 下面对各个包下面的类作一下简短的介绍。 包:org.jfree.chart 这个包下面的类都基本与图形本身有关 类:ChartColor 定义了一些图中使用的颜色 ChartFactory 能够产生各种图形的chart的对象 ChartFrame 在java程序中显示图片用的。 ChartMouseEvent 对图片进行鼠标操作的事件 ChartPanel 显示图片的面板,可以对各种事件作出响应 ChartRenderingInfo JFreeChart.draw() 方法执行时,存储显示信息 ChartUtilities 一个方法的集合,将chart转化为图片以及图片中的map的信息。 |