posts - 241,  comments - 116,  trackbacks - 0
          package com.hong.bean;

          import java.awt.Color;
          import java.awt.Font;
          import java.io.IOException;
          import java.io.PrintWriter;
          import java.text.NumberFormat;
          import java.text.SimpleDateFormat;
          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.DateAxis;
          import org.jfree.chart.axis.NumberAxis;
          import org.jfree.chart.entity.StandardEntityCollection;
          import org.jfree.chart.labels.StandardXYToolTipGenerator;
          import org.jfree.chart.plot.XYPlot;
          import org.jfree.chart.renderer.xy.XYItemRenderer;
          import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
          import org.jfree.chart.servlet.ServletUtilities;
          import org.jfree.chart.title.TextTitle;
          import org.jfree.data.time.Day;
          import org.jfree.data.time.TimeSeries;
          import org.jfree.data.time.TimeSeriesCollection;
          import org.jfree.data.xy.XYDataset;
          import org.jfree.ui.RectangleInsets;

          /**
          * @author caiwb 曲線圖的繪制
          */
          public class LineXYChart
          {
              /**
               * 返回生成圖片的文件名
               * @param session
               * @param pw
               * @return 生成圖片的文件名
               */
              public String getLineXYChart(HttpSession session, PrintWriter pw)
              {
                  XYDataset dataset = this.createDateSet();//建立數據集
                  String fileName = null;
                  //建立JFreeChart
                  JFreeChart chart = ChartFactory.createTimeSeriesChart(
                          "JFreeChart時間曲線序列圖", // title
                          "Date", // x-axis label
                          "Price", // y-axis label
                          dataset, // data
                          true, // create legend?
                          true, // generate tooltips?
                          false // generate URLs?
                          );
                  //設置JFreeChart的顯示屬性,對圖形外部部分進行調整
                  chart.setBackgroundPaint(Color.red);//設置曲線圖背景色
                  //設置字體大小,形狀
                  Font font = new Font("宋體", Font.BOLD, 16);
                  TextTitle title = new TextTitle("JFreeChart時間曲線序列圖", font);
                  chart.setTitle(title);

                  XYPlot plot = (XYPlot) chart.getPlot();//獲取圖形的畫布
                  plot.setBackgroundPaint(Color.lightGray);//設置網格背景色
                  plot.setDomainGridlinePaint(Color.green);//設置網格豎線(Domain軸)顏色
                  plot.setRangeGridlinePaint(Color.white);//設置網格橫線顏色
                  plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));//設置曲線圖與xy軸的距離
                  plot.setDomainCrosshairVisible(true);
                  plot.setRangeCrosshairVisible(true);
                  XYItemRenderer r = plot.getRenderer();
                  if (r instanceof XYLineAndShapeRenderer)
                  {
                      XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
                      renderer.setDefaultShapesVisible(true);
                      renderer.setDefaultShapesFilled(true);
                      renderer.setShapesVisible(true);//設置曲線是否顯示數據點
                  }

                  //設置Y軸
                  NumberAxis numAxis = (NumberAxis) plot.getRangeAxis();
                  NumberFormat numFormater = NumberFormat.getNumberInstance();
                  numFormater.setMinimumFractionDigits(2);
                  numAxis.setNumberFormatOverride(numFormater);

                  //設置提示信息
                  StandardXYToolTipGenerator tipGenerator = new StandardXYToolTipGenerator(
                          "歷史信息:({1} 16:00,{2})", new SimpleDateFormat("MM-dd"),
                          numFormater);
                  r.setToolTipGenerator(tipGenerator);

                  //設置X軸(日期軸)
                  DateAxis axis = (DateAxis) plot.getDomainAxis();
                  axis.setDateFormatOverride(new SimpleDateFormat("MM-dd"));

                  ChartRenderingInfo info = new ChartRenderingInfo(
                          new StandardEntityCollection());
                  try
                  {
                      fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,
                              session);//生成圖片
          //          Write the image map to the PrintWriter
                      ChartUtilities.writeImageMap(pw, fileName, info, false);
                  }
                  catch (IOException e)
                  {
                      e.printStackTrace();
                  }
                  pw.flush();
                  return fileName;//返回生成圖片的文件名
              }

              /**
               * 建立生成圖形所需的數據集
               * @return 返回數據集
               */
              private XYDataset createDateSet()
              {
                  TimeSeriesCollection dataset = new TimeSeriesCollection();//時間曲線數據集合
                  TimeSeries s1 = new TimeSeries("歷史曲線", Day.class);//創建時間數據源,每一個//TimeSeries在圖上是一條曲線

                  //s1.add(new Day(day,month,year),value),添加數據點信息
                  s1.add(new Day(1, 2, 2006), 123.51);
                  s1.add(new Day(2, 2, 2006), 122.1);
                  s1.add(new Day(3, 2, 2006), 120.86);
                  s1.add(new Day(4, 2, 2006), 122.50);
                  s1.add(new Day(5, 2, 2006), 123.12);
                  s1.add(new Day(6, 2, 2006), 123.9);
                  s1.add(new Day(7, 2, 2006), 124.47);
                  s1.add(new Day(8, 2, 2006), 124.08);
                  s1.add(new Day(9, 2, 2006), 123.55);
                  s1.add(new Day(10, 2, 2006), 122.53);

                  dataset.addSeries(s1);
                  dataset.setDomainIsPointsInTime(true);
                  return dataset;
              }
          }

          在jsp文件中顯示圖片
          首先在Web應用程序部署文件web.xml中添加以下代碼:

          <!-- 圖片顯示,使用專用的servlet來進行顯示,它會完成路徑的搜索及映射 -->
          <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>
          然后在jsp中顯示圖片
          完整的jsp文件:
          <!--文件名稱:timeLine.jsp-->
          <%@ page contentType="text/html;charset=gb2312" pageEncoding="GB2312"%>
          <%@ page import="com.caiwb.bean.LineXYChart"%>
          <%@ page import = "java.io.PrintWriter" %>
          <%
          LineXYChart xyChart=new LineXYChart();
          String fileName=xyChart.getLineXYChart(session,new PrintWriter(out));
            String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
          %>
          <html>
          </head>
          <title> JFreeChart使用例子</title>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          </head>
          <body>
          <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= fileName %>">
          </body>
          </html>
          posted on 2012-02-07 17:30 墻頭草 閱讀(493) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 博罗县| 东方市| 佛冈县| 棋牌| 云霄县| 清涧县| 轮台县| 德昌县| 百色市| 肇州县| 崇义县| 凤山县| 万宁市| 云梦县| 小金县| 安塞县| 五大连池市| 西峡县| 榆中县| 海宁市| 泸水县| 梅河口市| 正镶白旗| 武冈市| 安新县| 伊金霍洛旗| 古蔺县| 攀枝花市| 萨迦县| 元朗区| 静宁县| 健康| 西宁市| 香港| 苏尼特左旗| 建始县| 湖南省| 呼和浩特市| 喀喇沁旗| 奇台县| 怀集县|