| JFreeChart中几个核心的对象类: 
 JFreeChart   JFreeChart中几个核心的对象类: 
类名
  | 
类的作用以及简单描述
  |  
JFreeChart
  | 
图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象
  |  
XXXXXDataset
  | 
数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类。常用的数据集对象有:柱状图数据集对象DefaultCategoryDataset、饼图数据集对象DefauldPieDataset和曲线图数据集对象DefaultTableXYDataset
  |  
XXXXXPlot
  | 
图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持。常用的Plot对象有:柱状图CategoryPlot、饼图PiePlot和曲线图XYPlot。
  |  
XXXXXAxis
  | 
用于处理图表的两个轴:纵轴和横轴。常用的有NumberAxis数据轴,DateAxis日期轴。
  |  
XXXXXRenderer
  | 
负责如何显示一个图表对象。常用的Renderer有DefaultCategoryItemRenderer 柱状图显示器StandardXYItemRenderer曲线图显示器。饼图的Renderer
  |  
XXXXXURLGenerator
  | 
用于生成Web图表中每个项目的鼠标点击链接。常用的URLCenerator有StandardCategoryURLGenerator  StandardPieURLGenerator  StandardXYURLGenerator
  |  
XXXXXToolTipGenerator
  | 
用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类。常用的有:StandardXYToolTipGenerator StandardCategoryToolTipGenerator StandardPieItemLabelGenerator
  |     
一般的创建图表的过程为: 
1.  从数据库里读取数据 
2.  将数据保存到图表对应的数据集对象中 
3.  创建坐标轴对象 
4.  创建Renderer对象 
5.  创建Plot对象 
6.  创建JfreeChart对象 
7.  生成图片文件(或者二进制流)   
以JfreeChart提供的Web应用的例子来说明一下以上几个步骤: 
一.柱图。 
public static String generateBarChart(Date hitDate, HttpSession session, PrintWriter pw) { 
              String filename = null; 
              try { 
                     //  Retrieve list of WebHits 
                     WebHitDataSet whDataSet = new WebHitDataSet();                      ArrayList list = whDataSet.getDataBySection(hitDate);//获得数据集   
                     //  Throw a custom NoDataException if there is no data 
                     if (list.size() == 0) { 
                            System.out.println("No data has been found"); 
                            throw new NoDataException(); 
                     }   
                      //  Create and populate a CategoryDataset 
                     Iterator iter = list.listIterator(); 
            DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
                     while (iter.hasNext()) { 
                            WebHit wh = (WebHit)iter.next(); 
                dataset.addValue(new Long(wh.getHitCount()), "Hits", wh.getSection());                      }//将数据集保存到Dataset对象   
                     //  Create the chart object 
                     CategoryAxis categoryAxis = new CategoryAxis(""); 
                     ValueAxis valueAxis = new NumberAxis("");//创建坐标轴 
                     BarRenderer renderer = new BarRenderer();//创建Renderer 
                     renderer.setItemURLGenerator(new StandardCategoryURLGenerator("xy_chart.jsp","series","section"));//创建URLGenerator.再不需要连接的情况下将第一个参数设置成"###"就可以了 
            renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());//创建提示标签   
                     Plot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);//创建图表区域对象 
                     JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, false); 
                     chart.setBackgroundPaint(java.awt.Color.white);//创建图表   
                     //  Write the chart image to the temporary directory 
                     ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());//该工具类上面没有介绍,在鼠标移动到图片时显示提示信息是用Map实现的,这些Map是用该类生成的。 
                     filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);//保存图表为文件   
                     //  Write the image map to the PrintWriter                      ChartUtilities.writeImageMap(pw, filename, info);//生成Map信息。这些信息写在pw的输出流中,这里的输出流就是Response.out。也就是直接输出到页面了 
                     pw.flush();   
              } catch (NoDataException e) { 
                     System.out.println(e.toString()); 
                     filename = "public_nodata_500x300.png"; 
              } catch (Exception e) { 
                     System.out.println("Exception - " + e.toString()); 
                     e.printStackTrace(System.out); 
                     filename = "public_error_500x300.png"; 
              } 
              return filename; 
       } 
二.图表显示: 
<% 
       ......        String filename = WebHitChart.generateBarChart(dDate, session, new PrintWriter(out));//获得图片的文件名。注意该语句写在jsp文件(bar_chart.jsp)的开头,而用out的封装类作为参数,访问该页面后可以看到生成Map热点的内容输出再该页面的开头部分。也就是说最好是把这几句话写在页面有输出之前。 
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;//显示图片的Servlet全路径名,另外文件名作为该Servlet的参数 
       ...... 
%> 
...... 
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">   
src指定了servlet的全路径名,usermap指定了使用的热点。 
该Servlet必须在WEB-INF/web.xml文件中配置: 
<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> 
该Servlet的作用就是将图片文件的二进制流数据写道response的输出流中,在客户端也就显示成了图片。  
 
  |