<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    dyerac  
    dyerac In Java
    公告

    日歷
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567
    統(tǒng)計(jì)
    • 隨筆 - 36
    • 文章 - 10
    • 評(píng)論 - 94
    • 引用 - 0

    導(dǎo)航

    常用鏈接

    留言簿(5)

    隨筆分類(49)

    隨筆檔案(36)

    文章分類(11)

    文章檔案(10)

    相冊(cè)

    dyerac

    搜索

    •  

    積分與排名

    • 積分 - 79221
    • 排名 - 705

    最新隨筆

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

     

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

    jfreechart文檔居然是收費(fèi)的,在網(wǎng)上找了好多資料都是針對(duì)1。0之前的版本的,好入容易找到一個(gè)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(
     "世界傻瓜大獎(jiǎng)賽",//圖表標(biāo)題
     "比賽場(chǎng)次",//X軸標(biāo)題
     "傻瓜程度",//Y軸標(biāo)題
     dataset,//數(shù)據(jù)集合
     PlotOrientation.VERTICAL,//圖表顯示方向(水平、垂直)
     true,//是否使用圖例
     false,//是否使用工具提示
     false//是否為圖表增加URL
     );
     
     /*------------配置圖表屬性--------------*/
     // 1,設(shè)置整個(gè)圖表背景顏色
     chart.setBackgroundPaint(Color.yellow);
     
     
     /*------------設(shè)定Plot參數(shù)-------------*/
     CategoryPlot plot=chart.getCategoryPlot();
     // 2,設(shè)置詳細(xì)圖表的顯示細(xì)節(jié)部分的背景顏色
     plot.setBackgroundPaint(Color.PINK);
     // 3,設(shè)置垂直網(wǎng)格線顏色
     plot.setDomainGridlinePaint(Color.black);
     //4,設(shè)置是否顯示垂直網(wǎng)格線
     plot.setDomainGridlinesVisible(true);
     //5,設(shè)置水平網(wǎng)格線顏色
     plot.setRangeGridlinePaint(Color.yellow);
     //6,設(shè)置是否顯示水平網(wǎng)格線
     plot.setRangeGridlinesVisible(true);
     
     /*---------將所有數(shù)據(jù)轉(zhuǎn)換為整數(shù)形式---------*/
     final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
     rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
     
     /*---------設(shè)置是否在柱圖的狀態(tài)條上顯示邊框----*/
     CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
     BarRenderer  render=(BarRenderer) plot.getRenderer();
     render.setItemMargin(0.1);
     
     /*---------設(shè)置狀態(tài)條顏色的深淺漸變-----------*/
        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);

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

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

     /*------得到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;
     }
     
     
     /*-------------設(shè)置柱狀體頂端的數(shù)據(jù)顯示--------------*/
     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;
     }
     
     
     
     }
     /*-----------數(shù)據(jù)集合封裝-------------*/
     private static CategoryDataset createDataset(){
     String s1="笨笨";
     String s2="蛋蛋";
     String s3="傻傻";
     String s4="瓜瓜";
     
     String c1="第一場(chǎng)";
     String c2="第二場(chǎng)";
     String c3="第三場(chǎng)";
     String c4="第四場(chǎng)";
     String c5="第五場(chǎng)";
     
     /*-------------封裝圖表使用的數(shù)據(jù)集-------------*/
     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畫統(tǒng)計(jì)分析柱狀圖

    源作者:未知                   人氣:28605
     
     
            我們介紹使用 JFreeChart 生成柱狀圖,首先從一個(gè)最簡(jiǎn)單的例子開始。
    一 最簡(jiǎn)單的例子 為了降低門檻,讓大家心理有個(gè)底,先介紹一個(gè)簡(jiǎn)單的不能再簡(jiǎn)單的例子,圖片中的各類屬性都采用默認(rèn)值。 <%@ 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("水果銷量統(tǒng)計(jì)圖",
    "水果",
    "銷量",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>
    這個(gè) JSP 程序運(yùn)行的結(jié)果如下圖



    圖 一

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

    根據(jù)上表數(shù)據(jù),首先構(gòu)造 CategoryDataset, 這里不再使用上面簡(jiǎn)單例子里面的 DefaultCategoryDataset 類,而是 DatasetUtilities 更有效的構(gòu)造 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();
    //設(shè)置 columnKey 是否垂直顯示
    domainAxis.setVerticalCategoryLabels(true);
    //設(shè)置距離圖片左端距離
    domainAxis.setLowerMargin(0.1);
    //設(shè)置距離圖片右端距離
    domainAxis.setUpperMargin(0.1);
    //設(shè)置 columnKey 是否間隔顯示
    domainAxis.setSkipCategoryLabelsToFit(true);
    plot.setDomainAxis(domainAxis);
    上面代碼產(chǎn)生的效果如下圖,注意與圖二的區(qū)別。


    圖 三

    org.jfree.chart.axis.ValueAxis

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

    上面代碼產(chǎn)生的效果如下圖,注意與圖二的區(qū)別。


    圖 四

    org.jfree.chart.renderer.BarRenderer3D


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

    上面代碼產(chǎn)生的效果如下圖,注意與圖二的區(qū)別。


    圖 五

    補(bǔ)充兩個(gè)有用的方法
    補(bǔ)充 org.jfree.chart.plot.CategoryPlot 的兩個(gè)方法,這兩個(gè)方法對(duì)所有類型的圖表都有作用,因?yàn)樵谇懊鏇]有介紹,這里補(bǔ)充一下。


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

    上面代碼產(chǎn)生的效果如下圖,注意與圖二的區(qū)別。


    圖 六

    三 完整范例
    前面都是一些代碼片段,現(xiàn)在把這些片段組合成一個(gè)完整范例。

    <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("水果銷量圖統(tǒng)計(jì)",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();
    //設(shè)置最高的一個(gè) Item 與圖片頂端的距離
    rangeAxis.setUpperMargin(0.15);
    //設(shè)置最低的一個(gè) Item 與圖片底端的距離
    rangeAxis.setLowerMargin(0.15);
    <BR>plot.setRangeAxis(rangeAxis);
    BarRenderer3D renderer = new BarRenderer3D();
    renderer.setBaseOutlinePaint(Color.BLACK);
    //設(shè)置 Wall 的顏色<BR>
    renderer.setWallPaint(Color.gray);
    //設(shè)置每種水果代表的柱的顏色
    renderer.setSeriesPaint(0, new Color(0, 0, 255));
    renderer.setSeriesPaint(1, new Color(0, 100, 255));
    renderer.setSeriesPaint(2, Color.GREEN);
    //設(shè)置每個(gè)地區(qū)所包含的平行柱的之間距離
    renderer.setItemMargin(0.1);
    //顯示每個(gè)柱的數(shù)值,并修改該數(shù)值的字體屬性<BR>
    renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    renderer.setItemLabelsVisible(true);
    plot.setRenderer(renderer);
    //設(shè)置柱的透明度<BR>
    plot.setForegroundAlpha(0.6f);
    //設(shè)置地區(qū)、銷量的顯示位置<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>
    看看程序運(yùn)行的結(jié)果吧:


    圖 七



    三 總結(jié)


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


    --------------------------------------------------------------------------------------------
    使用JFreeChart增強(qiáng)Java繪圖功能
     

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

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

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

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

        二.開發(fā)Java Application,使用JFreeChart API實(shí)現(xiàn)創(chuàng)建餅圖的功能,源代碼如下:
    源文件: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 = "夢(mèng)澤科技員工學(xué)歷情況統(tǒng)計(jì)";
      DefaultPieDataset piedata = new DefaultPieDataset();
      piedata.setValue("大專", 8.1);
      piedata.setValue("大學(xué)", 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");
      }   
     } 
    }

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

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




    --------------------------------------------------------------------------------------------
    類名
    類的作用以及簡(jiǎn)單描述
    JFreeChart
    圖表對(duì)象,任何類型的圖表的最終表現(xiàn)形式都是在該對(duì)象進(jìn)行一些屬性的定制。JFreeChart引擎本身提供了一個(gè)工廠類用于創(chuàng)建不同類型的圖表對(duì)象
    XXXXXDataset
    數(shù)據(jù)集對(duì)象,用于提供顯示圖表所用的數(shù)據(jù)。根據(jù)不同類型的圖表對(duì)應(yīng)著很多類型的數(shù)據(jù)集對(duì)象類。常用的數(shù)據(jù)集對(duì)象有:柱狀圖數(shù)據(jù)集對(duì)象DefaultCategoryDataset、餅圖數(shù)據(jù)集對(duì)象DefauldPieDataset和曲線圖數(shù)據(jù)集對(duì)象DefaultTableXYDataset
    XXXXXPlot
    圖表區(qū)域?qū)ο螅旧线@個(gè)對(duì)象決定著什么樣式的圖表,創(chuàng)建該對(duì)象的時(shí)候需要Axis、Renderer以及數(shù)據(jù)集對(duì)象的支持。常用的Plot對(duì)象有:柱狀圖CategoryPlot、餅圖PiePlot和曲線圖XYPlot。
    XXXXXAxis
    用于處理圖表的兩個(gè)軸:縱軸和橫軸。常用的有NumberAxis數(shù)據(jù)軸,DateAxis日期軸。
    XXXXXRenderer
    負(fù)責(zé)如何顯示一個(gè)圖表對(duì)象。常用的Renderer有DefaultCategoryItemRenderer 柱狀圖顯示器StandardXYItemRenderer曲線圖顯示器。餅圖的Renderer
    XXXXXURLGenerator
    用于生成Web圖表中每個(gè)項(xiàng)目的鼠標(biāo)點(diǎn)擊鏈接。常用的URLCenerator有StandardCategoryURLGenerator
    StandardPieURLGenerator
    StandardXYURLGenerator
    XXXXXToolTipGenerator
    用于生成圖象的幫助提示,不同類型圖表對(duì)應(yīng)不同類型的工具提示類。常用的有:StandardXYToolTipGenerator
    StandardCategoryToolTipGenerator
    StandardPieItemLabelGenerator
     

    一般的創(chuàng)建圖表的過(guò)程為:

    1.  從數(shù)據(jù)庫(kù)里讀取數(shù)據(jù)

    2.  將數(shù)據(jù)保存到圖表對(duì)應(yīng)的數(shù)據(jù)集對(duì)象中

    3.  創(chuàng)建坐標(biāo)軸對(duì)象

    4.  創(chuàng)建Renderer對(duì)象

    5.  創(chuàng)建Plot對(duì)象

    6.  創(chuàng)建JfreeChart對(duì)象

    7.  生成圖片文件(或者二進(jìn)制流)

     

    JfreeChart提供的Web應(yīng)用的例子來(lái)說(shuō)明一下以上幾個(gè)步驟:

    一.柱圖。

    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);//獲得數(shù)據(jù)集
     

                         //  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());

                         }//將數(shù)據(jù)集保存到Dataset對(duì)象
     

                         //  Create the chart object

                         CategoryAxis categoryAxis = new CategoryAxis("");

                         ValueAxis valueAxis = new NumberAxis("");//創(chuàng)建坐標(biāo)軸

                         BarRenderer renderer = new BarRenderer();//創(chuàng)建Renderer

                         renderer.setItemURLGenerator(new StandardCategoryURLGenerator("xy_chart.jsp","series","section"));//創(chuàng)建URLGenerator.再不需要連接的情況下將第一個(gè)參數(shù)設(shè)置成"###"就可以了

                renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());//創(chuàng)建提示標(biāo)簽

     

                         Plot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);//創(chuàng)建圖表區(qū)域?qū)ο?/p>

                         JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, false);

                         chart.setBackgroundPaint(java.awt.Color.white);//創(chuàng)建圖表

     

                         //  Write the chart image to the temporary directory

                         ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());//該工具類上面沒有介紹,在鼠標(biāo)移動(dòng)到圖片時(shí)顯示提示信息是用Map實(shí)現(xiàn)的,這些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。也就是直接輸出到頁(yè)面了

                         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));//獲得圖片的文件名。注意該語(yǔ)句寫在jsp文件(bar_chart.jsp)的開頭,而用out的封裝類作為參數(shù),訪問(wèn)該頁(yè)面后可以看到生成Map熱點(diǎn)的內(nèi)容輸出再該頁(yè)面的開頭部分。也就是說(shuō)最好是把這幾句話寫在頁(yè)面有輸出之前。

        String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;//顯示圖片的Servlet全路徑名,另外文件名作為該Servlet的參數(shù)

           ......

    %>

    ......

    <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">

     

    src指定了servlet的全路徑名,usermap指定了使用的熱點(diǎn)。

    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的作用就是將圖片文件的二進(jìn)制流數(shù)據(jù)寫道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.*;
    //數(shù)據(jù)集
    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;

    //數(shù)據(jù)集輔助
    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;


    //表現(xiàn)形式集
    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;

    //標(biāo)簽
    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;
     
     /*定義靜態(tài)數(shù)據(jù)*/
     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={"餅圖","分離型餅圖","三維餅圖","復(fù)合餅圖","三維分離型餅圖","簇狀柱形圖","三維簇狀柱形圖","堆積柱形圖","三維堆積柱形圖","面積圖","三維面積圖","折線圖","三維折線圖","三維曲面圖","三維柱形圖","雷達(dá)圖","散點(diǎn)圖","百分比堆積面積圖","三維百分比堆積面積圖","折線散點(diǎn)圖","面積散點(diǎn)圖","時(shí)間序列圖","三維柱形圓錐圖","盤高-盤低-收盤圖","開盤-盤高-盤低-收盤圖","曲面圖(俯視框架圖)","氣泡圖","簇狀條形圖","數(shù)據(jù)點(diǎn)折線圖","無(wú)數(shù)據(jù)點(diǎn)折線散點(diǎn)圖","無(wú)數(shù)據(jù)點(diǎn)平滑線散點(diǎn)圖"};
     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標(biāo)簽格式
          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標(biāo)簽格式
          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標(biāo)簽格式
          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標(biāo)簽格式
          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標(biāo)簽格式
          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);
           //設(shè)置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);
           //設(shè)置X軸、Y軸的顯示位置
           vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          //設(shè)置柱的透明度
          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);
           //設(shè)置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);       
           //設(shè)置X軸、Y軸的顯示位置
           vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          //設(shè)置柱的透明度
          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);
           //設(shè)置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);       
           //設(shè)置X軸、Y軸的顯示位置
           vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          //設(shè)置柱的透明度
          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);
           //設(shè)置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);
           
           //設(shè)置X軸、Y軸的顯示位置
           vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          //設(shè)置柱的透明度
          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);
           //設(shè)置區(qū)域顏色
           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);
           
           //設(shè)置X軸、Y軸的顯示位置
           vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          //設(shè)置區(qū)域透明度
          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);
           //設(shè)置區(qū)域顏色
           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);
           
           //設(shè)置X軸、Y軸的顯示位置
           vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          //設(shè)置區(qū)域透明度
          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)
          {       
           //設(shè)置線條顏色
           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);
            }
           }       
           
           //設(shè)置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)
          {       
           //設(shè)置線面顏色
           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);
            }
           }
           //設(shè)置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)
          {       
           //設(shè)置柱顏色
           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);
            }
           }
           //設(shè)置X軸、Y軸的顯示位置
           vCategoryPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vCategoryPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          vCategoryPlot.setRenderer(vWaterfallBarRenderer);
          //背景表格線
          vCategoryPlot.setDomainGridlinesVisible(true);
          //設(shè)置區(qū)域透明度
          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)
          {       
           //設(shè)置線面顏色
           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);
            }
           }       
           //設(shè)置X軸、Y軸的顯示位置
           vXYPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vXYPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
          }
          //設(shè)置線條顏色
          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)
          {
           //設(shè)置線面顏色
           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);
            }
           }
           //設(shè)置X軸、Y軸的顯示位置
           vXYPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
           vXYPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
           
           //設(shè)置線條顏色
           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點(diǎn)");
          }
          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));
          //十分鐘前的臨時(shí)文件刪除
          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應(yīng)用示例

    <%@ 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">
    <%
     //初始化
     //考慮圖形中是否直接鏈接到統(tǒng)計(jì)查詢表格
     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,"默認(rèn)統(tǒng)計(jì)圖","時(shí)間軸","統(tǒng)計(jì)值軸");
     }
     else
     {
      FreeChart.createChart(Integer.parseInt(request.getParameter("ChartType")),"統(tǒng)計(jì)圖","時(shí)間軸","統(tǒng)計(jì)值軸");
     }
     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>

    也可以將應(yīng)用繼續(xù)用Bean封裝

    posted on 2007-08-17 13:03 dyerac in java... 閱讀(1144) 評(píng)論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)載學(xué)習(xí)區(qū)
     
    Copyright © dyerac in java... Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 国产精品公开免费视频| 色偷偷亚洲第一综合网| 亚洲w码欧洲s码免费| 亚洲人成电影在线天堂| 久久精品国产影库免费看| 亚洲码国产精品高潮在线| 久久www免费人成看国产片| 亚洲高清偷拍一区二区三区| 免费无码国产V片在线观看| 成人亚洲综合天堂| 大片免费观看92在线视频线视频| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲产国偷V产偷V自拍色戒| 国内精品久久久久影院免费 | 丰满少妇作爱视频免费观看| 亚洲欧洲精品成人久久曰影片| 无遮挡免费一区二区三区| 亚洲日韩中文在线精品第一| 国产国产人免费人成成免视频 | 深夜A级毛片视频免费| 亚洲国产精品不卡毛片a在线| 九九九精品视频免费| 国产精品亚洲片在线观看不卡| 日本黄色动图免费在线观看| 久久亚洲中文字幕精品有坂深雪| 亚洲黄色免费观看| 亚洲乱码在线观看| 国产成人综合久久精品免费 | 亚洲kkk4444在线观看| 国产精品无码一区二区三区免费| 一日本道a高清免费播放| 久久精品国产亚洲网站| 精品无码国产污污污免费网站 | 日本久久久免费高清| sss日本免费完整版在线观看| 亚洲啪啪AV无码片| 久久久久久精品成人免费图片| 亚洲看片无码在线视频| 免费国产不卡午夜福在线| 成人免费ā片在线观看| 亚洲2022国产成人精品无码区|