JFreeChart學習筆記(創建JSP輸出)

JFreeChart學習筆記

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> <iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-8672584364535288&dt=1187577769421&lmt=1187577769&prev_fmts=160x90_0ads_al&format=336x280_as&output=html&correlator=1187577769390&url=http%3A%2F%2Fdoc.readmen.com%2F7%2F118300.shtml&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=000000&color_border=FFFFFF&ad_type=text_image&ref=http%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3Djfreechart%26cl%3D3&cc=72&ga_vid=1840802550.1187577769&ga_sid=1187577769&ga_hid=1645242538&flash=9&u_h=1024&u_w=1280&u_ah=994&u_aw=1280&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"></iframe>
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的輸出流中,在客戶端也就顯示成了圖片。

 
發佈了45 篇原創文章 · 獲贊 1 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章