dyerac  
          dyerac In Java
          公告

          日歷
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345
          統計
          • 隨筆 - 36
          • 文章 - 10
          • 評論 - 94
          • 引用 - 0

          導航

          常用鏈接

          留言簿(5)

          隨筆分類(49)

          隨筆檔案(36)

          文章分類(11)

          文章檔案(10)

          相冊

          dyerac

          搜索

          •  

          積分與排名

          • 積分 - 79505
          • 排名 - 705

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

           

          ------------------------------------------------------------------------------------------

          jfreechart文檔居然是收費的,在網上找了好多資料都是針對1。0之前的版本的,好入容易找到一個1.0下面可以用的


          package com.meetexpo.cms.backend.util;

          import java.awt.Color;
          import java.awt.Font;
          import java.awt.GradientPaint;
          import java.awt.RenderingHints;
          import java.io.PrintWriter;

          import javax.servlet.http.HttpSession;

          import org.jfree.chart.ChartFactory;
          import org.jfree.chart.ChartRenderingInfo;
          import org.jfree.chart.ChartUtilities;
          import org.jfree.chart.JFreeChart;
          import org.jfree.chart.axis.CategoryAxis;
          import org.jfree.chart.axis.CategoryLabelPositions;
          import org.jfree.chart.axis.NumberAxis;
          import org.jfree.chart.axis.ValueAxis;
          import org.jfree.chart.entity.StandardEntityCollection;
          import org.jfree.chart.labels.CategoryItemLabelGenerator;
          import org.jfree.chart.plot.CategoryPlot;
          import org.jfree.chart.plot.PlotOrientation;
          import org.jfree.chart.renderer.category.BarRenderer;
          import org.jfree.chart.renderer.category.CategoryItemRenderer;
          import org.jfree.chart.servlet.ServletUtilities;
          import org.jfree.chart.title.TextTitle;
          import org.jfree.data.category.CategoryDataset;
          import org.jfree.data.category.DefaultCategoryDataset;

          public class CategoryItemChart {
           public static String generateBarChart(
                   HttpSession session,
                   PrintWriter pw,
                   int w, int h) {
           String filename = null;
           try {
           CategoryDataset dataset=createDataset();
           JFreeChart chart=ChartFactory.createBarChart(
           "世界傻瓜大獎賽",//圖表標題
           "比賽場次",//X軸標題
           "傻瓜程度",//Y軸標題
           dataset,//數據集合
           PlotOrientation.VERTICAL,//圖表顯示方向(水平、垂直)
           true,//是否使用圖例
           false,//是否使用工具提示
           false//是否為圖表增加URL
           );
           
           /*------------配置圖表屬性--------------*/
           // 1,設置整個圖表背景顏色
           chart.setBackgroundPaint(Color.yellow);
           
           
           /*------------設定Plot參數-------------*/
           CategoryPlot plot=chart.getCategoryPlot();
           // 2,設置詳細圖表的顯示細節部分的背景顏色
           plot.setBackgroundPaint(Color.PINK);
           // 3,設置垂直網格線顏色
           plot.setDomainGridlinePaint(Color.black);
           //4,設置是否顯示垂直網格線
           plot.setDomainGridlinesVisible(true);
           //5,設置水平網格線顏色
           plot.setRangeGridlinePaint(Color.yellow);
           //6,設置是否顯示水平網格線
           plot.setRangeGridlinesVisible(true);
           
           /*---------將所有數據轉換為整數形式---------*/
           final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
           rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
           
           /*---------設置是否在柱圖的狀態條上顯示邊框----*/
           CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
           BarRenderer  render=(BarRenderer) plot.getRenderer();
           render.setItemMargin(0.1);
           
           /*---------設置狀態條顏色的深淺漸變-----------*/
              GradientPaint gp0 = new GradientPaint(
                      0.0f, 0.0f, new Color(255,200,80),
                      0.0f, 0.0f, new Color(255,255,40)
                      );
              GradientPaint gp1 = new GradientPaint(
                      0.0f, 0.0f, new Color(50,255,50),
                      0.0f, 0.0f, new Color(100,255,100)
                      );
              GradientPaint gp2 = new GradientPaint(
                      0.0f, 0.0f, Color.red,
                      0.0f, 0.0f, new Color(255,100,100)
                      );
              GradientPaint gp3 = new GradientPaint(
                          0.0f, 0.0f, new Color(108,108,255),
                          0.0f, 0.0f, new Color(150, 150, 200)
                          );
                       
              renderer.setSeriesPaint(0, gp0);
              renderer.setSeriesPaint(1, gp1);
              renderer.setSeriesPaint(2, gp2);
              renderer.setSeriesPaint(3, gp3);

              /*
               *
               * 解決柱狀體與圖片邊框的間距問題
               *
               *
               * */                
              /*------設置X軸標題的傾斜程度----*/
              CategoryAxis domainAxis = plot.getDomainAxis();
              domainAxis.setCategoryLabelPositions(
              CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0)
              );
              /*------設置柱狀體與圖片邊框的左右間距--*/
              domainAxis.setLowerMargin(0.01);
              domainAxis.setUpperMargin(0.01);

              /*------設置柱狀體與圖片邊框的上下間距---*/
              ValueAxis rAxis = plot.getRangeAxis();
              rAxis.setUpperMargin(0.15);
              rAxis.setLowerMargin(0.15);
             
              /*---------設置每一組柱狀體之間的間隔---------*/
              render.setItemMargin(0.0);
              /*
               *
               * 解決柱狀體與圖片邊框的間距問題
               *
               *
               * */ 
             
             
             
             
             
              /*
               *
               *
               * 解決JFREECHART的中文顯示問題
               *
               *
               * */
             
              /*----------設置消除字體的鋸齒渲染(解決中文問題)--------------*/
              chart.getRenderingHints().put(
                      RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF
                      );
              /*----------設置標題字體--------------------------*/
              TextTitle textTitle = chart.getTitle();
              textTitle.setFont(new Font("黑體", Font.PLAIN, 20));       
              /*------設置X軸坐標上的文字-----------*/
              domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,11));
              /*------設置X軸的標題文字------------*/
              domainAxis.setLabelFont(new Font("宋體",Font.PLAIN,12));        
              /*------設置Y軸坐標上的文字-----------*/
              rAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN,12));
              /*------設置Y軸的標題文字------------*/
              rAxis.setLabelFont(new Font("黑體",Font.PLAIN,12));
             
              /*---------設置柱狀體上的顯示的字體---------*/        
              renderer.setItemLabelGenerator(new LabelGenerator(0.0));
              renderer.setItemLabelFont(new Font("宋體",Font.PLAIN,12));
              renderer.setItemLabelsVisible(true);
             
              /*
               *
               *
               * 解決JFREECHART的中文顯示問題
               *
               *
               * */    

           /*------得到chart的保存路徑----*/
              ChartRenderingInfo info = new ChartRenderingInfo(new
                      StandardEntityCollection());
           filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
           
           /*------使用printWriter將文件寫出----*/
           ChartUtilities.writeImageMap(pw, filename, info,true);
           pw.flush();
           
           }
           catch (Exception e) {
           System.out.println("Exception - " + e.toString());
           e.printStackTrace(System.out);
           filename = "public_error_500x300.png";
           }
           return filename;
           }
           
           
           /*-------------設置柱狀體頂端的數據顯示--------------*/
           static class LabelGenerator implements CategoryItemLabelGenerator {
           
           private double threshold;
           
           public LabelGenerator(double threshold) {
           this.threshold = threshold;
           }
           
           public String generateLabel(CategoryDataset dataset,
           int row,int column) {
           String result = null;
           final Number value = dataset.getValue(row, column);
           if (value != null) {
           final double v = value.doubleValue();
           if (v > this.threshold) {
           result = value.toString();
           }
           }
           return result;
           }
           
           public String generateRowLabel(CategoryDataset dataset,
           int row){
           return null;
           
           }
           public String generateColumnLabel(CategoryDataset dataset,
           int column){
           return null;
           }
           
           
           
           }
           /*-----------數據集合封裝-------------*/
           private static CategoryDataset createDataset(){
           String s1="笨笨";
           String s2="蛋蛋";
           String s3="傻傻";
           String s4="瓜瓜";
           
           String c1="第一場";
           String c2="第二場";
           String c3="第三場";
           String c4="第四場";
           String c5="第五場";
           
           /*-------------封裝圖表使用的數據集-------------*/
           DefaultCategoryDataset dataset=new DefaultCategoryDataset();
           dataset.setValue(1.0,s1,c1);
           dataset.setValue(2.0,s1,c2);
           dataset.setValue(3.0,s1,c3);
           dataset.setValue(4.0,s1,c4);
           dataset.setValue(5.0,s1,c5);
           
           dataset.setValue(5.0,s2,c1);
           dataset.setValue(4.0,s2,c2);
           dataset.setValue(3.0,s2,c3);
           dataset.setValue(2.0,s2,c4);
           dataset.setValue(1.0,s2,c5);
           
           dataset.setValue(1.0,s3,c1);
           dataset.setValue(2.0,s3,c2);
           dataset.setValue(3.0,s3,c3);
           dataset.setValue(2.0,s3,c4);
           dataset.setValue(1.0,s3,c5);
           
           dataset.setValue(1.0,s4,c1);
           dataset.setValue(2.0,s4,c2);
           dataset.setValue(3.0,s4,c3);
           dataset.setValue(4.0,s4,c4);
           dataset.setValue(5.0,s4,c5);
           
           
           return dataset;
           }
              
           }


          JSP代碼如下:
          <%@ page contentType="text/html;charset=GBK"%>

          <%@ page import="java.io.PrintWriter"%>
          <%@ page import="com.meetexpo.cms.backend.util.CategoryItemChart;"%>
          <html>
          <head>
          <title>
          </title>
          <%
          //以下部分為圖象輸出

          String fileName=CategoryItemChart.generateBarChart(session,new PrintWriter(out),580,250);
          String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;

          %>

          </head>
          <body bgcolor="#ffffff">
          <table  width="580" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td>
                <img src="<%= graphURL %>" width=580 height=250 border=0
                   >
              </td>
            </tr>
          </table>
          </body>
          </html>

          類包是jcommon-1.0.0.jar和jfreechart-1.0.0.jar

           

          -------------------------------------------------------------------------------------------

          用JFreeChart畫統計分析柱狀圖

          源作者:未知                   人氣:28605
           
           
                  我們介紹使用 JFreeChart 生成柱狀圖,首先從一個最簡單的例子開始。
          一 最簡單的例子 為了降低門檻,讓大家心理有個底,先介紹一個簡單的不能再簡單的例子,圖片中的各類屬性都采用默認值。 <%@ page contentType="text/html;charset=GBK"%><BR>
          <%@ page import="org.jfree.chart.ChartFactory,<BR>
          org.jfree.chart.JFreeChart,<BR>
          org.jfree.chart.plot.PlotOrientation,<BR>
          org.jfree.chart.servlet.ServletUtilities,<BR>
          org.jfree.data.DefaultCategoryDataset"%><BR>
          <%
          <BR>
          DefaultCategoryDataset dataset = new DefaultCategoryDataset();<BR>
          dataset.addValue(300, "廣州", "蘋果");<BR>
          dataset.addValue(200, "廣州", "梨子");<BR>
          dataset.addValue(500, "廣州", "葡萄");<BR>
          dataset.addValue(340, "廣州", "芒果");<BR>
          dataset.addValue(280, "廣州", "荔枝");<BR>
          JFreeChart chart = ChartFactory.createBarChart3D("水果銷量統計圖",
          "水果",
          "銷量",dataset,
          PlotOrientation.VERTICAL,
          false,
          false,
          false);<BR>
          String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);<BR>
          String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;<BR>
          %>
          <IMG height=300 src="<%= graphURL %>" width=500 useMap="#<%= filename %>" border=0>
          這個 JSP 程序運行的結果如下圖



          圖 一

          二 柱狀圖高級特性
                  上面的程序簡單,但生成的柱狀圖也很簡單。更多的時候,我們可能需要不同的效果。org.jfree.chart.ChartFactory 這個工廠類有createBarChart,createStackedBarChart,createBarChart3D,createStackedBarChart3D這幾個工廠方法創建不同類型的柱狀圖。關于這四個方法的 JFreeChart 的 Java Doc API 文檔有詳細說明,比較重要的是 PlotOrientation.VERTICAL 讓平行柱垂直顯示,而 PlotOrientation.HORIZONTAL 則讓平行柱水平顯示。
          幾個對柱狀圖影響較大的幾個類,它們分別是:
          org.jfree.chart.axis.CategoryAxis
          org.jfree.chart.axis.ValueAxis
          org.jfree.chart.renderer.BarRenderer
          org.jfree.chart.renderer.BarRenderer3D
          我們還是以實例來說明這幾個類,先來假設一個需要統計的數據表:
            北京 上海 廣州 成都 深圳
          蘋果 672 766 223 540 126
          梨子 325 521 210 340 106
          葡萄 332 256 523 240 526

          根據上表數據,首先構造 CategoryDataset, 這里不再使用上面簡單例子里面的 DefaultCategoryDataset 類,而是 DatasetUtilities 更有效的構造 CategoryDataset,如下列代碼:

          double[][] data = new double[][] {{672, 766, 223, 540, 126}, {325, 521, 210, 340, 106}, {332, 256, 523, 240, 526} };
          String[] rowKeys = {"蘋果","梨子","葡萄"};
          String[] columnKeys = {"北京","上海","廣州","成都","深圳"};
          CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);

          用上面的 dataset 生成的 3D 柱狀圖


          圖 二

          org.jfree.chart.axis.CategoryAxis
          CategoryAxis domainAxis = plot.getDomainAxis();
          //設置 columnKey 是否垂直顯示
          domainAxis.setVerticalCategoryLabels(true);
          //設置距離圖片左端距離
          domainAxis.setLowerMargin(0.1);
          //設置距離圖片右端距離
          domainAxis.setUpperMargin(0.1);
          //設置 columnKey 是否間隔顯示
          domainAxis.setSkipCategoryLabelsToFit(true);
          plot.setDomainAxis(domainAxis);
          上面代碼產生的效果如下圖,注意與圖二的區別。


          圖 三

          org.jfree.chart.axis.ValueAxis

          ValueAxis rangeAxis = plot.getRangeAxis();
          //設置最高的一個柱與圖片頂端的距離
          rangeAxis.setUpperMargin(0.15);
          //設置最低的一個柱與圖片底端的距離
          //rangeAxis.setLowerMargin(0.15);
          plot.setRangeAxis(rangeAxis);

          上面代碼產生的效果如下圖,注意與圖二的區別。


          圖 四

          org.jfree.chart.renderer.BarRenderer3D


          BarRenderer3D renderer = new BarRenderer3D();
          renderer.setBaseOutlinePaint(Color.BLACK);
          //設置 Wall 的顏色
          renderer.setWallPaint(Color.gray);
          //設置每種水果代表的柱的顏色
          renderer.setSeriesPaint(0, new Color(0, 0, 255));
          renderer.setSeriesPaint(1, new Color(0, 100, 255));
          renderer.setSeriesPaint(2, Color.GREEN);
          //設置每種水果代表的柱的 Outline 顏色
          renderer.setSeriesOutlinePaint(0, Color.BLACK);
          renderer.setSeriesOutlinePaint(1, Color.BLACK);
          renderer.setSeriesOutlinePaint(2, Color.BLACK);
          //設置每個地區所包含的平行柱的之間距離
          renderer.setItemMargin(0.1);
          //顯示每個柱的數值,并修改該數值的字體屬性
          renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
          renderer.setItemLabelFont(new Font("黑體",Font.PLAIN,12));
          renderer.setItemLabelsVisible(true);

          上面代碼產生的效果如下圖,注意與圖二的區別。


          圖 五

          補充兩個有用的方法
          補充 org.jfree.chart.plot.CategoryPlot 的兩個方法,這兩個方法對所有類型的圖表都有作用,因為在前面沒有介紹,這里補充一下。


          //設置地區、銷量的顯示位置
          plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
          plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);

          上面代碼產生的效果如下圖,注意與圖二的區別。


          圖 六

          三 完整范例
          前面都是一些代碼片段,現在把這些片段組合成一個完整范例。

          <DIV class=code>
          <%@ page contentType="text/html;charset=GBK"%>
          <%@ page import="java.awt.Color,
          java.awt.Font,
          org.jfree.chart.ChartFactory,
          org.jfree.chart.JFreeChart,
          org.jfree.chart.plot.PlotOrientation,
          org.jfree.chart.servlet.ServletUtilities,
          org.jfree.data.CategoryDataset,
          org.jfree.data.DatasetUtilities,
          org.jfree.chart.plot.CategoryPlot,
          org.jfree.chart.axis.CategoryAxis,
          org.jfree.chart.axis.ValueAxis,
          org.jfree.chart.renderer.BarRenderer3D,
          org.jfree.chart.labels.StandardCategoryItemLabelGenerator,
          org.jfree.chart.axis.AxisLocation"%>
          <%
          double[][] data = new double[][] {
          {672, 766, 223, 540, 126},
          {325, 521, 210, 340, 106},
          {332, 256, 523, 240, 526}
          };
          String[] rowKeys = {"蘋果","梨子","葡萄"};
          String[] columnKeys = {"北京","上海","廣州","成都","深圳"};
          CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
          JFreeChart chart = ChartFactory.createBarChart3D("水果銷量圖統計",null,null,dataset,
          PlotOrientation.VERTICAL,true,false,false);
          chart.setBackgroundPaint(Color.WHITE);
          CategoryPlot plot = chart.getCategoryPlot();
          CategoryAxis domainAxis = plot.getDomainAxis();
          domainAxis.setVerticalCategoryLabels(false);
          plot.setDomainAxis(domainAxis);
          ValueAxis rangeAxis = plot.getRangeAxis();
          //設置最高的一個 Item 與圖片頂端的距離
          rangeAxis.setUpperMargin(0.15);
          //設置最低的一個 Item 與圖片底端的距離
          rangeAxis.setLowerMargin(0.15);
          <BR>plot.setRangeAxis(rangeAxis);
          BarRenderer3D renderer = new BarRenderer3D();
          renderer.setBaseOutlinePaint(Color.BLACK);
          //設置 Wall 的顏色<BR>
          renderer.setWallPaint(Color.gray);
          //設置每種水果代表的柱的顏色
          renderer.setSeriesPaint(0, new Color(0, 0, 255));
          renderer.setSeriesPaint(1, new Color(0, 100, 255));
          renderer.setSeriesPaint(2, Color.GREEN);
          //設置每個地區所包含的平行柱的之間距離
          renderer.setItemMargin(0.1);
          //顯示每個柱的數值,并修改該數值的字體屬性<BR>
          renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
          renderer.setItemLabelsVisible(true);
          plot.setRenderer(renderer);
          //設置柱的透明度<BR>
          plot.setForegroundAlpha(0.6f);
          //設置地區、銷量的顯示位置<BR>
          plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
          plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
          String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
          %s>
          <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>"&gt;
          </DIV>
          看看程序運行的結果吧:


          圖 七



          三 總結


          我只介紹了少量的方法,更多的請參考 JFreeChart 的 Java Doc API 文檔和 Sample Code。


          --------------------------------------------------------------------------------------------
          使用JFreeChart增強Java繪圖功能
           

              在給用戶演示軟件產品時,我們往往發現客戶最初更感興趣的是我們程序的用戶界面,而不是程序的功能本身。也正因如此,圖形用戶界面的應用程序一經出現即廣受歡迎,界面友好的Windows操作系統雖然性能很不穩定、安全漏洞百出,仍有無數用戶有怨無悔地追隨就是一個典型的例子。計算機編程技術發展到今天,遇到數據展示時人們已不滿足于枯燥的列表方式,而更喜歡色彩豐富、一目了然的的圖形效果。于是,在許多軟件產品中會涉及到制圖功能。

              本文將介紹是一組功能強大、靈活易用的Java制圖API——JFreeChart,使用JFreeChart我們可以極大地增強Java應用程序的高級制圖功能,生成多種通用性的圖表,包括餅圖、柱狀圖、折線圖、甘特圖等。對于要在Swing或Web應用程序中加入自制圖表的Java開發者而言,JFreeChart無疑是一種理想的選擇。

            下面以生成最常用的餅圖(Pie Chart)為例,介紹一下使用JFreeChart制圖的基本過程:

            一.獲取JFreeChart最新版本
            JFreeChart為開放源碼自由軟件,可以到下述網址免費下載:http://www.jfree.org/jfreechart/,目前最新版本為v1.0.0-pre2版,下載并解壓縮后,將其中包含的下述兩個.jar文件加入到計算機編譯和運行環境的環境變量CLASSPATH中:jcommon-1.0.0-pre2.jar,jfreechart-1.0.0-pre2.jar。

              二.開發Java Application,使用JFreeChart API實現創建餅圖的功能,源代碼如下:
          源文件:PieChart.java
          import java.io.*;
          import java.awt.*;
          import org.jfree.chart.*;
          import org.jfree.chart.title.TextTitle;
          import org.jfree.data.general.*;

          public class PieChart{
           public static void main(String[] args){  
            String title = "夢澤科技員工學歷情況統計";
            DefaultPieDataset piedata = new DefaultPieDataset();
            piedata.setValue("大專", 8.1);
            piedata.setValue("大學", 27.6);
            piedata.setValue("碩士", 53.2);
            piedata.setValue("博士及以上", 19.2);
            piedata.setValue("大專以下", 1.9);
            JFreeChart chart = ChartFactory.createPieChart(title, piedata, true, true, true);
            chart.setTitle(new TextTitle(title, new Font("宋體", Font.BOLD, 25)));
            chart.addSubtitle(new TextTitle("最后更新日期:2005年5月19日", new Font("楷書", Font.ITALIC, 18)));
            chart.setBackgroundPaint(Color.white);
            try {
             ChartUtilities.saveChartAsJPEG(new File("PieChart.jpg"), chart, 360, 300);
            } catch (IOException exz) {
             System.out.print("....Cant′t Create image File");
            }   
           } 
          }

              三.編譯運行上述源程序,生成的餅圖文件"PieChart.jpg"效果如下:

              關于上述應用程序使用的JFreeChart API,可查閱JFreeChart提供的在線API文檔,以獲取更詳細的信息,其URL為http://www.jfree.org/jfreechart/javadoc/。讀者可嘗試參照上述例程、并借助于API 文檔創建其他類型的圖表。
          需要說明的是,JFreeChart雖是一個開源(open source)項目——API可以免費下載、API文檔可以免費在線查閱,其官方開發教程卻是要花錢(US$39.95)購買的,相關URL為
          http://www.object-refinery.com/jfreechart/guide.html




          --------------------------------------------------------------------------------------------
          類名
          類的作用以及簡單描述
          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的輸出流中,在客戶端也就顯示成了圖片。



          ---------------------------------------------------------------------------------------------

          封裝FreeChart的Bean

          FreeChart.java

          package com.function;
          /*基于JFreeChart 1.0.0 Pre2.jar*/
          import java.io.*;
          import java.awt.Font;
          import java.awt.Color;
          import java.text.SimpleDateFormat;
          import java.text.DecimalFormat;
          import java.util.Calendar;
          import javax.servlet.http.HttpSession;

          import org.jfree.data.*;
          import org.jfree.chart.*;
          //數據集
          import org.jfree.data.category.DefaultCategoryDataset;
          import org.jfree.data.category.CategoryDataset;
          import org.jfree.data.category.IntervalCategoryDataset;
          import org.jfree.data.general.DefaultPieDataset;
          import org.jfree.data.general.PieDataset;
          import org.jfree.data.xy.TableXYDataset;
          import org.jfree.data.xy.XYZDataset;
          import org.jfree.data.xy.IntervalXYDataset;
          import org.jfree.data.xy.WindDataset;
          import org.jfree.data.general.WaferMapDataset;
          import org.jfree.data.xy.XYDataset;
          import org.jfree.data.xy.OHLCDataset;
          import org.jfree.data.xy.SignalsDataset;
          import org.jfree.data.statistics.BoxAndWhiskerXYDataset;

          //數據集輔助
          import org.jfree.data.time.Day;
          import org.jfree.data.time.Hour;
          import org.jfree.data.time.TimeSeries;
          import org.jfree.data.time.TimeSeriesCollection;

          //圖集
          import org.jfree.chart.plot.CategoryPlot;
          import org.jfree.chart.plot.PiePlot;
          import org.jfree.chart.plot.MultiplePiePlot;
          import org.jfree.chart.plot.PiePlot3D;
          import org.jfree.chart.plot.XYPlot;


          //表現形式集
          import org.jfree.chart.renderer.category.BarRenderer;
          import org.jfree.chart.renderer.category.BarRenderer3D;
          import org.jfree.chart.renderer.category.StackedBarRenderer;
          import org.jfree.chart.renderer.category.StackedBarRenderer3D;
          import org.jfree.chart.renderer.category.StackedAreaRenderer;
          import org.jfree.chart.renderer.category.LineAndShapeRenderer;
          import org.jfree.chart.renderer.category.LineRenderer3D;
          import org.jfree.chart.renderer.category.WaterfallBarRenderer;
          import org.jfree.chart.renderer.xy.XYItemRenderer;

          //標簽
          import org.jfree.chart.labels.StandardPieItemLabelGenerator;


          //刻度
          import org.jfree.chart.axis.NumberAxis;
          import org.jfree.chart.axis.DateAxis;
          import org.jfree.chart.axis.CategoryAxis;
          import org.jfree.chart.axis.ValueAxis;
          import org.jfree.chart.axis.SegmentedTimeline;

          import org.jfree.chart.axis.TickUnit;
          import org.jfree.chart.axis.TickUnits;
          import org.jfree.chart.axis.TickUnitSource;

          //通用
          import org.jfree.data.general.DatasetUtilities;

          //常量
          import org.jfree.chart.axis.AxisLocation;
          import org.jfree.chart.plot.PlotOrientation;
          import org.jfree.util.TableOrder;


          public class FreeChart
          {
           /*定義各類圖表所需的Dataset*/
           private DefaultCategoryDataset vDefaultCategoryDataset=null;
           private CategoryDataset vCategoryDataset=null;
           private DefaultPieDataset vDefaultPieDataset=null;
           private PieDataset vPieDataset=null;
           private XYDataset vXYDataset=null;
           private TableXYDataset vTableXYDataset=null;
           private XYZDataset vXYZDataset=null;
           private IntervalXYDataset vIntervalXYDataset=null;
           private WindDataset vWindDataset=null;
           private WaferMapDataset vWaferMapDataset=null;
           private IntervalCategoryDataset vIntervalCategoryDataset=null;
           private OHLCDataset vOHLCDataset=null;
           private SignalsDataset vSignalsDataset=null;
           private BoxAndWhiskerXYDataset vBoxAndWhiskerXYDataset=null;
           /*定義各類圖表所需的Dataset輔助*/
           TimeSeries vTimeSeries=null;
           TimeSeriesCollection vTimeSeriesCollection=null;
           /*定義圖表*/
           private JFreeChart vFreeChart=null;
           private JFreeChart vFreeChartExtend=null;
           /*映射圖片的路徑名稱*/
           private String strFileName=null;
           
           /*定義效果*/
           private CategoryPlot vCategoryPlot=null;
           private PiePlot vPiePlot=null;
           private MultiplePiePlot vMultiplePiePlot=null;
           private PiePlot3D vPiePlot3D=null;
           private XYPlot vXYPlot=null;
           
           private StandardPieItemLabelGenerator vStandardPieItemLabelGenerator=null;
           
           /*定義刻度*/
           private NumberAxis vNumberAxis=null;
           private DateAxis vDateAxis=null;
           private CategoryAxis vCategoryAxis=null;
           private ValueAxis vValueAxis=null;
           private SegmentedTimeline vSegmentedTimeline=null; 
           
           private BarRenderer vBarRenderer=null;
           private BarRenderer3D vBarRenderer3D=null;
           private StackedBarRenderer vStackedBarRenderer=null;
           private StackedBarRenderer3D vStackedBarRenderer3D=null;
           private StackedAreaRenderer vStackedAreaRenderer=null;
           private LineAndShapeRenderer vLineAndShapeRenderer=null;
           private LineRenderer3D vLineRenderer3D=null;
           private WaterfallBarRenderer vWaterfallBarRenderer=null;
           private XYItemRenderer vXYItemRenderer=null;
           
           //是否啟用效果模式
           private boolean bRender=false;
           
           /*定義靜態數據*/
           private String[] strItemArray=null;
           private String[] strMultipleItemArray=null;
           private String[] strCategoryArray=null;
           private String[] strDataArray=null;
           private String[] strMultipleDataArray=null;
           private double[][] iMultipleDataArray=null;
           
           /**/
           
           public static String[] vChartTypeArray={"餅圖","分離型餅圖","三維餅圖","復合餅圖","三維分離型餅圖","簇狀柱形圖","三維簇狀柱形圖","堆積柱形圖","三維堆積柱形圖","面積圖","三維面積圖","折線圖","三維折線圖","三維曲面圖","三維柱形圖","雷達圖","散點圖","百分比堆積面積圖","三維百分比堆積面積圖","折線散點圖","面積散點圖","時間序列圖","三維柱形圓錐圖","盤高-盤低-收盤圖","開盤-盤高-盤低-收盤圖","曲面圖(俯視框架圖)","氣泡圖","簇狀條形圖","數據點折線圖","無數據點折線散點圖","無數據點平滑線散點圖"};
           public String strTimeAxis="";
           public void FreeChart()
           {
            
           }
           public void createDataset(String strMultipleItemList,String strCategoryList,String strMultipleDataList)
           {
            strMultipleItemArray=strMultipleItemList.split(",");
            strCategoryArray=strCategoryList.split(",");
            strMultipleDataArray=strMultipleDataList.split("#");
            iMultipleDataArray=new double[strCategoryArray.length][strMultipleItemArray.length];
            
            java.text.SimpleDateFormat vSimpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
            java.text.SimpleDateFormat vSimpleDateFormatToday=new SimpleDateFormat("yyyy-MM-");
            java.util.Date vItemDate=null;
            java.util.Date vTodayDate=null;
            Day vDay=null;
            vTodayDate=new java.util.Date();
            vTimeSeriesCollection=new TimeSeriesCollection();
            vTimeSeriesCollection.setDomainIsPointsInTime(false);
            
            for(int mIndex=0;mIndex<strMultipleDataArray.length;mIndex++)
            {
             String[] strElementArray=strMultipleDataArray[mIndex].split(",");
             if(strTimeAxis.equals("Hour"))
             {
              vTimeSeries=new TimeSeries(strCategoryArray[mIndex],Hour.class);
             }
             else
             {
              vTimeSeries=new TimeSeries(strCategoryArray[mIndex],Day.class);
             }
             //vTimeSeries.clear();
             for(int nIndex=0;nIndex<strElementArray.length;nIndex++)
             {
              iMultipleDataArray[mIndex][nIndex]=Double.parseDouble(strElementArray[nIndex]);
              try
              {
               //vItemDate=vSimpleDateFormat.parse(vSimpleDateFormatToday.format(vTodayDate)+String.valueOf(nIndex+1));
               vItemDate=vSimpleDateFormat.parse(strMultipleItemArray[nIndex]);
               if(strTimeAxis.equals("Hour"))
               {
                vDay=new Day(vItemDate.getDate(),1+vItemDate.getMonth(),1900+vItemDate.getYear());
                vTimeSeries.add(new Hour(vItemDate.getHours(),vDay),Double.parseDouble(strElementArray[nIndex]));
               }
               else
               {
                vTimeSeries.add(new Day(vItemDate.getDate(),1+vItemDate.getMonth(),1900+vItemDate.getYear()),Double.parseDouble(strElementArray[nIndex]));
               }
               
              }
              catch(Exception e)
              {System.out.println(e.getMessage());}
             }   
             vTimeSeriesCollection.addSeries(vTimeSeries);  
            }
            try
            {
             vCategoryDataset=DatasetUtilities.createCategoryDataset(strCategoryArray,strMultipleItemArray,iMultipleDataArray);
             vPieDataset=DatasetUtilities.createPieDatasetForColumn(vCategoryDataset,0);
             vPieDataset=DatasetUtilities.createPieDatasetForRow(vCategoryDataset,0);
             //vWaferMapDataset=(WaferMapDataset)vCategoryDataset;
             
             vTableXYDataset=(TableXYDataset)vTimeSeriesCollection;
             vIntervalXYDataset=(IntervalXYDataset)vTimeSeriesCollection;   
             
             vXYDataset=(XYDataset)vTimeSeriesCollection;
             /*
             vXYZDataset=(XYZDataset)vTimeSeriesCollection;
             //vWaferMapDataset=(WaferMapDataset)vTimeSeriesCollection;
             vWindDataset=(WindDataset)vTimeSeriesCollection;   
             vOHLCDataset=(OHLCDataset)vTimeSeriesCollection;
             vSignalsDataset=(SignalsDataset)vTimeSeriesCollection;
             vBoxAndWhiskerXYDataset=(BoxAndWhiskerXYDataset)vTimeSeriesCollection;
             */
            }
            catch(Exception e)
            {}
           }
           public void createDataset(String strItemList,String strDataList)
           {
            vDefaultCategoryDataset=new DefaultCategoryDataset();
            vDefaultPieDataset=new DefaultPieDataset();  
              
            strItemArray=strItemList.split(",");
            strDataArray=strDataList.split(",");
            for(int kIndex=0;kIndex<strItemArray.length;kIndex++)
            {
             vDefaultCategoryDataset.addValue(Double.parseDouble(strDataArray[kIndex])," ",strItemArray[kIndex]);
             vDefaultPieDataset.setValue(strItemArray[kIndex],Double.parseDouble(strDataArray[kIndex]));   
            }  
           }
           public DefaultCategoryDataset getDefaultCategoryDataset()
           {
            return this.vDefaultCategoryDataset;
           }
           public CategoryDataset getCategoryDataset()
           {
            return this.vCategoryDataset;
           }
           public DefaultPieDataset getDefaultPieDataset()
           {
            return this.vDefaultPieDataset;
           }
           public PieDataset getPieDataset()
           {
            return this.vPieDataset;
           }
           public XYDataset getXYDataset()
           {
            return this.vXYDataset;
           }
           public TableXYDataset getTableXYDataset()
           {
            return this.vTableXYDataset;
           }
           public XYZDataset getXYZDataset()
           {
            return this.vXYZDataset;
           }
           public IntervalXYDataset getIntervalXYDataset()
           {
            return this.vIntervalXYDataset;
           }
           public WindDataset getWindDataset()
           {
            return this.vWindDataset;
           }
           public WaferMapDataset getWaferMapDataset()
           {
            return this.vWaferMapDataset;
           }
           public IntervalCategoryDataset getIntervalCategoryDataset()
           {
            return this.vIntervalCategoryDataset;
           }
           public OHLCDataset getOHLCDataset()
           {
            return this.vOHLCDataset;
           }
           public SignalsDataset getSignalsDataset()
           {
            return this.vSignalsDataset;
           }
           public BoxAndWhiskerXYDataset getBoxAndWhiskerXYDataset()
           {
            return this.vBoxAndWhiskerXYDataset;
           }
           /*
           iChartType:圖表類型
           */
           public void createChart(int iChartType,String strFreeChartInfo,String strFreeChartXInfo,String strFreeChartYInfo)
           {
            switch(iChartType)
            {
             case 1:    
              vFreeChart=ChartFactory.createPieChart(strFreeChartInfo,this.getPieDataset(),true,false,false);
              try
              {
               vPiePlot=(PiePlot)vFreeChart.getPlot();
               if(vPiePlot!=null)
               {
                if(bRender)
                {
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   //指定Section色彩
                   vPiePlot.setSectionPaint(iIndex,new Color(0,0+iIndex*(255/strItemArray.length),255));
                   //指定Section輪廓線顏色
                   vPiePlot.setSectionOutlinePaint(0,Color.BLACK);
                  }
                 }
                }
                //指定Section標簽格式
                vStandardPieItemLabelGenerator=new StandardPieItemLabelGenerator("{1}");
                vPiePlot.setLabelGenerator(vStandardPieItemLabelGenerator);
                //
                vPiePlot.setForegroundAlpha(0.5f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 2:
              vFreeChart=ChartFactory.createPieChart(strFreeChartInfo,this.getPieDataset(),this.getPieDataset(),0,false,true,false,false,false,false);
              try
              {
               vPiePlot=(PiePlot)vFreeChart.getPlot();
               if(vPiePlot!=null)
               {
                if(bRender)
                {
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   //指定Section色彩
                   vPiePlot.setSectionPaint(iIndex,new Color(0,0+iIndex*(255/strItemArray.length),255));
                   //指定Section輪廓線顏色
                   vPiePlot.setSectionOutlinePaint(0,Color.BLACK);
                  }
                  //抽取指定塊
                  vPiePlot.setExplodePercent(0,1.00);
                 }
                }
                //指定Section標簽格式
                vStandardPieItemLabelGenerator=new StandardPieItemLabelGenerator("{1}");
                vPiePlot.setLabelGenerator(vStandardPieItemLabelGenerator);
                      
                vPiePlot.setForegroundAlpha(0.5f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 3:
              vFreeChart=ChartFactory.createMultiplePieChart(strFreeChartInfo,this.getCategoryDataset(),TableOrder.BY_ROW,true,false,false);
              try
              {
               vMultiplePiePlot=(MultiplePiePlot)vFreeChart.getPlot();
               if(vMultiplePiePlot!=null)
               {
                vFreeChartExtend=vMultiplePiePlot.getPieChart();
                vPiePlot=(PiePlot)vFreeChartExtend.getPlot();
                if(bRender)
                {
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   //指定Section色彩
                   vPiePlot.setSectionPaint(iIndex,new Color(0,0+iIndex*(255/strItemArray.length),255));
                   //指定Section輪廓線顏色
                   vPiePlot.setSectionOutlinePaint(0,Color.BLACK);
                  }
                 }
                }
                //指定Section標簽格式
                vStandardPieItemLabelGenerator=new StandardPieItemLabelGenerator("{1}");
                vPiePlot.setLabelGenerator(vStandardPieItemLabelGenerator);
                vPiePlot.setForegroundAlpha(0.5f);      
               }
              }
              catch(Exception e)
              {}
              break;
             case 4:
              vFreeChart=ChartFactory.createPieChart3D(strFreeChartInfo,this.getPieDataset(),true,false,false);
              try
              {     
               vPiePlot3D=(PiePlot3D)vFreeChart.getPlot();
               if(vPiePlot!=null)
               {
                if(bRender)
                {
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   //指定Section色彩
                   vPiePlot3D.setSectionPaint(iIndex,new Color(0,0+iIndex*(255/strItemArray.length),255));
                   //指定Section輪廓線顏色
                   vPiePlot3D.setSectionOutlinePaint(0,Color.BLACK);
                  }
                 }
                }
                //指定Section標簽格式
                vStandardPieItemLabelGenerator=new StandardPieItemLabelGenerator("{1}");
                vPiePlot3D.setLabelGenerator(vStandardPieItemLabelGenerator);
                //
                vPiePlot3D.setForegroundAlpha(0.8f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 5:
              vFreeChart=ChartFactory.createMultiplePieChart3D(strFreeChartInfo,this.getCategoryDataset(),TableOrder.BY_ROW,true,false,false);
              try
              {
               vMultiplePiePlot=(MultiplePiePlot)vFreeChart.getPlot();
               if(vMultiplePiePlot!=null)
               {
                vFreeChartExtend=vMultiplePiePlot.getPieChart();
                vPiePlot3D=(PiePlot3D)vFreeChartExtend.getPlot();
                if(bRender)
                {       
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   //指定Section色彩
                   vPiePlot3D.setSectionPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   //指定Section輪廓線顏色
                   vPiePlot3D.setSectionOutlinePaint(0,Color.BLACK);
                  }
                 }       
                }
                //指定Section標簽格式
                vStandardPieItemLabelGenerator=new StandardPieItemLabelGenerator("{1}");
                vPiePlot3D.setLabelGenerator(vStandardPieItemLabelGenerator);
                //
                vPiePlot3D.setForegroundAlpha(0.8f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 6:
              vFreeChart=ChartFactory.createBarChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                if(bRender)
                {
                 vBarRenderer=new BarRenderer();
                 vBarRenderer.setBaseOutlinePaint(Color.GRAY);
                 //設置X軸代表的柱的顏色      
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vBarRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));        
                   vBarRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }
                 vBarRenderer.setItemMargin(0.1);   
                 vCategoryPlot.setRenderer(vBarRenderer);
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                //設置柱的透明度
                vCategoryPlot.setForegroundAlpha(0.5f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 7:
              vFreeChart=ChartFactory.createStackedBarChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                if(bRender)
                {
                 vStackedBarRenderer=new StackedBarRenderer();
                 vStackedBarRenderer.setBaseOutlinePaint(Color.GRAY);
                 //設置X軸代表的柱的顏色
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vStackedBarRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vStackedBarRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }      
             
                 vCategoryPlot.setRenderer(vStackedBarRenderer);       
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                //設置柱的透明度
                vCategoryPlot.setForegroundAlpha(0.5f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 8:
              vFreeChart=ChartFactory.createBarChart3D(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                if(bRender)
                {
                 vBarRenderer3D=new BarRenderer3D();
                 vBarRenderer3D.setBaseOutlinePaint(Color.GRAY);
                 //設置X軸代表的柱的顏色
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vBarRenderer3D.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));        
                   vBarRenderer3D.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }
                 vBarRenderer3D.setItemMargin(0.1);
             
                 vCategoryPlot.setRenderer(vBarRenderer3D);       
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                //設置柱的透明度
                vCategoryPlot.setForegroundAlpha(0.8f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 9:
              vFreeChart=ChartFactory.createStackedBarChart3D(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                if(bRender)
                {
                 vStackedBarRenderer3D=new StackedBarRenderer3D();
                 vStackedBarRenderer3D.setBaseOutlinePaint(Color.GRAY);
                 //設置X軸代表的柱的顏色
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vStackedBarRenderer3D.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vStackedBarRenderer3D.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }      
             
                 vCategoryPlot.setRenderer(vStackedBarRenderer3D);
                 
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                //設置柱的透明度
                vCategoryPlot.setForegroundAlpha(0.8f);
               }
              }
              catch(Exception e)
              {}    
              break;
             case 10:
              vFreeChart=ChartFactory.createAreaChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getDefaultCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                if(bRender)
                {
                 vStackedAreaRenderer=new StackedAreaRenderer();
                 vStackedAreaRenderer.setBaseOutlinePaint(Color.GRAY);
                 //設置區域顏色
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   vStackedAreaRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strItemArray.length),255));
                   vStackedAreaRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }      
             
                 vCategoryPlot.setRenderer(vStackedAreaRenderer);
                 
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                //設置區域透明度
                vCategoryPlot.setForegroundAlpha(0.5f);
                //背景表格線
                vCategoryPlot.setDomainGridlinesVisible(true);
               }
              }
              catch(Exception e)
              {}
              break;
             case 11:
              vFreeChart=ChartFactory.createStackedAreaChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                if(bRender)
                {
                 vStackedAreaRenderer=new StackedAreaRenderer();
                 vStackedAreaRenderer.setBaseOutlinePaint(Color.GRAY);
                 //設置區域顏色
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vStackedAreaRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vStackedAreaRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }      
             
                 vCategoryPlot.setRenderer(vStackedAreaRenderer);
                 
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                //設置區域透明度
                vCategoryPlot.setForegroundAlpha(0.5f);
               }
              }
              catch(Exception e)
              {}    
              break;
             case 12:
              vFreeChart=ChartFactory.createLineChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                vLineAndShapeRenderer=new LineAndShapeRenderer();
                vLineAndShapeRenderer.setBaseOutlinePaint(Color.GRAY);
                if(bRender)
                {       
                 //設置線條顏色
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vLineAndShapeRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vLineAndShapeRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }       
                 
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                vCategoryPlot.setRenderer(vLineAndShapeRenderer);
                //背景表格線
                vCategoryPlot.setDomainGridlinesVisible(true);
               }
              }
              catch(Exception e)
              {}    
              break;
             case 13:
              vFreeChart=ChartFactory.createLineChart3D(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                vLineRenderer3D=new LineRenderer3D();
                vLineRenderer3D.setBaseOutlinePaint(Color.GRAY);
                if(bRender)
                {       
                 //設置線面顏色
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vLineRenderer3D.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vLineRenderer3D.setSeriesFillPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vLineRenderer3D.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                vCategoryPlot.setRenderer(vLineRenderer3D);
                //背景表格線
                vCategoryPlot.setDomainGridlinesVisible(true);
               }
              }
              catch(Exception e)
              {}
              break;
             case 14:
              vFreeChart=ChartFactory.createGanttChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getIntervalCategoryDataset(),true,false,false);
              break;
             case 15:
              vFreeChart=ChartFactory.createWaterfallChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getCategoryDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vCategoryPlot=vFreeChart.getCategoryPlot();
               if(vCategoryPlot!=null)
               {
                vWaterfallBarRenderer=new WaterfallBarRenderer();
                vWaterfallBarRenderer.setBaseOutlinePaint(Color.GRAY);
                if(bRender)
                {       
                 //設置柱顏色
                 if(strCategoryArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strCategoryArray.length;iIndex++)
                  {
                   vWaterfallBarRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vWaterfallBarRenderer.setSeriesFillPaint(iIndex,new Color(0,0+iIndex*(255/strCategoryArray.length),255));
                   vWaterfallBarRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }
                 //設置X軸、Y軸的顯示位置
                 vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                vCategoryPlot.setRenderer(vWaterfallBarRenderer);
                //背景表格線
                vCategoryPlot.setDomainGridlinesVisible(true);
                //設置區域透明度
                vCategoryPlot.setForegroundAlpha(0.5f);
               }
              }
              catch(Exception e)
              {}
              break;
             case 16:
              vFreeChart=ChartFactory.createPolarChart(strFreeChartInfo,this.getXYDataset(),true,false,false);
              break;
             case 17:
              vFreeChart=ChartFactory.createScatterPlot(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getXYDataset(),PlotOrientation.VERTICAL,true,false,false);
              break;
             case 18:
              vFreeChart=ChartFactory.createXYBarChart(strFreeChartInfo,strFreeChartXInfo,false,strFreeChartYInfo,this.getIntervalXYDataset(),PlotOrientation.VERTICAL,true,false,false);
              break;
             case 19:
              vFreeChart=ChartFactory.createXYAreaChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getXYDataset(),PlotOrientation.VERTICAL,true,false,false);
              break;
             case 20:
              vFreeChart=ChartFactory.createStackedXYAreaChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getTableXYDataset(),PlotOrientation.VERTICAL,true,false,false); 
              break;
             case 21:
              vFreeChart=ChartFactory.createXYLineChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getXYDataset(),PlotOrientation.VERTICAL,true,false,false);
              try
              {
               vXYPlot=(XYPlot)vFreeChart.getXYPlot();
               if(vXYPlot!=null)
               {
                vXYItemRenderer=vXYPlot.getRenderer();
                vXYItemRenderer.setBaseOutlinePaint(Color.GRAY);
                if(bRender)
                {       
                 //設置線面顏色
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   vXYItemRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strItemArray.length),255));
                   vXYItemRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }       
                 //設置X軸、Y軸的顯示位置
                 vXYPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vXYPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                }
                //設置線條顏色
                vXYItemRenderer.setPaint(new Color(0,100,255));
                vXYPlot.setRenderer(vXYItemRenderer);
                //背景表格線
                vXYPlot.setDomainGridlinesVisible(true);
               }
              }
              catch(Exception e)
              {}    
              break;
             case 22:
              vFreeChart=ChartFactory.createXYStepChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getXYDataset(),PlotOrientation.VERTICAL,true,false,false);
              break;
             case 23:
              vFreeChart=ChartFactory.createXYStepAreaChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getXYDataset(),PlotOrientation.VERTICAL,true,false,false);
              break;
             case 24:
              vFreeChart=ChartFactory.createTimeSeriesChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getXYDataset(),true,false,false);
              try
              {
               vXYPlot=(XYPlot)vFreeChart.getXYPlot();
               if(vXYPlot!=null)
               {
                vXYItemRenderer=vXYPlot.getRenderer();
                vXYItemRenderer.setBaseOutlinePaint(Color.GRAY);
                if(bRender)
                {
                 //設置線面顏色
                 if(strItemArray.length>0)
                 {
                  for(int iIndex=0;iIndex<strItemArray.length;iIndex++)
                  {
                   vXYItemRenderer.setSeriesPaint(iIndex,new Color(0,0+iIndex*(255/strItemArray.length),255));
                   vXYItemRenderer.setSeriesOutlinePaint(0,Color.BLACK);
                  }
                 }
                 //設置X軸、Y軸的顯示位置
                 vXYPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
                 vXYPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
                 
                 //設置線條顏色
                 vXYItemRenderer.setPaint(new Color(0,100,255));
                 vXYPlot.setRenderer(vXYItemRenderer);
                }      
                //背景表格線
                vXYPlot.setDomainGridlinesVisible(true);
                
                SimpleDateFormat vSimpleDateFormat=null;
                if(strTimeAxis.equals("Hour"))
                {
                 vSimpleDateFormat=new SimpleDateFormat("dd日HH點");
                }
                else      
                {      
                 vSimpleDateFormat=new SimpleDateFormat("MM月dd日");
                }
                     vDateAxis=(DateAxis)vXYPlot.getDomainAxis();
                    vDateAxis.setDateFormatOverride(vSimpleDateFormat);
               }
              }
              catch(Exception e)
              {}
              break;
             case 25:
              vFreeChart=ChartFactory.createCandlestickChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getOHLCDataset(),true);
              break;
             case 26:
              vFreeChart=ChartFactory.createHighLowChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getOHLCDataset(),true);
              break;
             case 27:
              vFreeChart=ChartFactory.createHighLowChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getOHLCDataset(),true);
              break;
             case 28:
              vFreeChart=ChartFactory.createSignalChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getSignalsDataset(),true);
              break;
             case 29:
              vFreeChart=ChartFactory.createBubbleChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getXYZDataset(),PlotOrientation.VERTICAL,true,false,false);
              break;
             case 30:
              vFreeChart=ChartFactory.createHistogram(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getIntervalXYDataset(),PlotOrientation.VERTICAL,true,false,false);
              break;
             case 31:
              vFreeChart=ChartFactory.createBoxAndWhiskerChart(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getBoxAndWhiskerXYDataset(),true);
              break;
             case 32:
              vFreeChart=ChartFactory.createWindPlot(strFreeChartInfo,strFreeChartXInfo,strFreeChartYInfo,this.getWindDataset(),true,false,false);
              break;
             case 33:
              vFreeChart=ChartFactory.createWaferMapChart(strFreeChartInfo,this.getWaferMapDataset(),PlotOrientation.VERTICAL,true,false,false);       
              break;
             default:
              vFreeChart=ChartFactory.createPieChart(strFreeChartInfo,this.getPieDataset(),true,false,false);
              break;
            }
            //圖表背景顏色
            vFreeChart.setBackgroundPaint(new Color(212,234,243));
           }
           public JFreeChart getChart()
           {
            return this.vFreeChart;
           }
           public void createImageFile(int iWidth,int iHeight,HttpSession session)
           {
            try
            {
             java.util.Date vDate=new java.util.Date(System.currentTimeMillis());
             java.text.SimpleDateFormat vSimpleDateFormat=new SimpleDateFormat("yyyyMMddHHmmss");
             java.util.Date vFileDate=null;
             File[] vFileList=(new File(session.getServletContext().getRealPath("/"))).listFiles();   
             for(int kIndex=0;kIndex<vFileList.length;kIndex++)
             {
              if(vFileList[kIndex].isFile())
              {     
               if(vFileList[kIndex].getName().indexOf(".jpg")!=-1)
               {
                vFileDate=vSimpleDateFormat.parse(vFileList[kIndex].getName().substring(0,vFileList[kIndex].getName().length()-4));
                //十分鐘前的臨時文件刪除
                if(vDate.getTime()-vFileDate.getTime()>60*10*1000)
                {
                 vFileList[kIndex].delete();
                }
               }
              }
             }   
             String strTime=vSimpleDateFormat.format(vDate);
             strFileName=session.getServletContext().getRealPath("/")+"http://www.java-asp.net/java/200601/\\"+strTime+".jpg";
             ChartUtilities.saveChartAsJPEG(new File(strFileName),100,this.getChart(),iWidth,iHeight);
             strFileName="/"+getApplicationName(session.getServletContext().getRealPath("/"))+"/"+strTime+".jpg";
            }
            catch(Exception e)
            {}
           }
           public String getImageFile()
           {
            return this.strFileName;
           }
           public String getApplicationName(String strRealPath)
           {
            String[] strAppArray=strRealPath.split("\\\\");
            return strAppArray[strAppArray.length-1];
           }
           public boolean getRender()
           {
            return bRender;
           }
           public void setRender(boolean bRender)
           {
            this.bRender=bRender;
           }
           public String getTimeAxis()
           {
            return this.strTimeAxis;
           }
           public void setTimeAxis(String strTimeAxis)
           {
            this.strTimeAxis=strTimeAxis;
           }
          }

          JSP應用示例

          <%@ page contentType="text/html; charset=gb2312"%>
          <%@ page import="java.io.*"%>
          <jsp:useBean id="FreeChart" scope="session" class="com.function.FreeChart"/>
          <head>
          <meta http-equiv="Pragma" content="no-cache">
          <meta http-equiv="Cache-Control" content="no-cache">
          <meta http-equiv="Expires" content="0">
          </head>
          <link rel="stylesheet" type="text/css" href="/defineOA/css/default.css">
          <%
           //初始化
           //考慮圖形中是否直接鏈接到統計查詢表格
           String strTimeList="";
           String strMultipleTimeList="";
           String strCategoryList="";
           String strData="";
           String strMultipleData="";

           strTimeList="2005-05-01 00:00:00,2005-05-02 05:00:00,2005-05-03 10:00:00,2005-05-04 15:00:00,2005-05-05 20:00:00";
           strMultipleTimeList="2005-05-01 00:00:00,2005-05-02 05:00:00,2005-05-03 10:00:00,2005-05-04 15:00:00,2005-05-05 20:00:00";
           strCategoryList="JSP工作量,Servlet工作量,Bean工作量";
           strData="1,2,3,4,5";
           strMultipleData="1,2,3,4,5#2,3,4,5,6#3,4,5,6,7";
           
           FreeChart.createDataset(strMultipleTimeList,strCategoryList,strMultipleData);
           FreeChart.createDataset(strTimeList,strData);
           FreeChart.setRender(true);
           FreeChart.setTimeAxis("Hour");
           if(request.getParameter("ChartType")==null)
           {
            FreeChart.createChart(1,"默認統計圖","時間軸","統計值軸");
           }
           else
           {
            FreeChart.createChart(Integer.parseInt(request.getParameter("ChartType")),"統計圖","時間軸","統計值軸");
           }
           FreeChart.createImageFile(800,400,session);

           response.setHeader("Pragma","No-cache");
           response.setDateHeader("Expires",0);
           response.setHeader("Cache-Control","no-cache");
          %>
          <%
           for(int iIndex=0;iIndex<FreeChart.vChartTypeArray.length;iIndex++)
           {
          %>
          <input type=button class="GeneralButton" value="<%=FreeChart.vChartTypeArray[iIndex]%>" onclick="window.location=´/defineOA/test/chart.jsp?ChartType=<%=iIndex+1%>´;">
          <%
           }
          %>
          <br>
          <fieldset>
          <legend>圖表</legend>
          <!--class="GeneralImage"-->
          <br>
          <center>
          <table>
            <tr>
              <td style="border:1 solid #3399CC;"><img src="<%=FreeChart.getImageFile()%>"></td>
            </tr>
          </table>
          </center>
          <br>
          </fieldset>

          也可以將應用繼續用Bean封裝

          posted on 2007-08-17 13:03 dyerac in java... 閱讀(1150) 評論(0)  編輯  收藏 所屬分類: 轉載學習區
           
          Copyright © dyerac in java... Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 夹江县| 西乌| 平阴县| 股票| 绩溪县| 绥宁县| 阿拉尔市| 济阳县| 水富县| 南郑县| 兴文县| 吉林省| 嘉义市| 贵溪市| 米脂县| 聂拉木县| 莲花县| 陇西县| 鄂托克旗| 康定县| 专栏| 梨树县| 罗源县| 沅陵县| 晋宁县| 永平县| 香格里拉县| 彭阳县| 阿坝| 永顺县| 滕州市| 淮北市| 宁强县| 莱阳市| 额敏县| 德江县| 长顺县| 晋州市| 潼南县| 灵山县| 和顺县|