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

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

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

    廉頗老矣,尚能飯否

    java:從技術到管理

    常用鏈接

    統計

    最新評論

    生成兩個日期間的以天為間隔的折線圖(web方式和控制臺方式)

    package demo;

    import java.awt.Color;
    import java.awt.Font;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.List;

    import org.jfree.chart.ChartFactory;
    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.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.LineAndShapeRenderer;
    import org.jfree.chart.title.TextTitle;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.general.DatasetUtilities;

    /**
     * 生成兩個日期間的以天為間隔的折線圖
     * @throws ParseException
     */
    public class MyLineAndShapeChart {
     public CategoryPlot getLineAndShapeChart() throws ParseException {  
    //準備生成數據源需要的要素
      List<String> dateList = new ArrayList<String>();
      List<Double> valList = new ArrayList<Double>();
      
      String start = "2008-01-21";
      String end = "2008-02-08";
      //字符串轉換成日期
      SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
      Date startDate=format.parse(start);
      Calendar startTime=Calendar.getInstance();
      startTime.clear();
      startTime.setTime(startDate);
      int startYear = startTime.get(Calendar.YEAR);
      int startMonth = startTime.get(Calendar.MONTH);
      int startDay = startTime.get(Calendar.DAY_OF_MONTH);
      Date endDate=format.parse(end);
      Calendar endTime=Calendar.getInstance();
      endTime.clear();
      endTime.setTime(endDate);
      int endYear = endTime.get(Calendar.YEAR);
      int endMonth = endTime.get(Calendar.MONTH);
      int endDay = endTime.get(Calendar.DAY_OF_MONTH);
      System.out.println("注意西方的月份從0到11,中國的月份從1到12");
      System.out.println("下面輸入的是中國的日期.注意其中的轉換問題");
      System.out.println("start date : " + start);
      System.out.println("end date : " + end);
      
      int count = 0;
      for (int x = startYear; x <= endYear; x++) {
       //羅馬歷法產生年份公元1582年
       int gregorianCutoverYear = 1582;
       boolean isLeapYear = x >= gregorianCutoverYear ?
         ((x%4 == 0) && ((x%100 != 0) || (x%400 == 0))) :
          (x%4 == 0);
       //判斷是否是閏年
       //java方法
       //boolean isLeapYear = (new GregorianCalendar()).isLeapYear(x);
       
       String isBigYear = "是平年";
       if (isLeapYear) {
        isBigYear = "是閏年";
       }
       System.out.println(x + "年" + isBigYear);
       
       //獲取開始月的最大天數
       //java方法
       //SimpleDateFormat aFormat=new SimpleDateFormat("yyyy-MM-dd");
       //Date date = aFormat.parse(start);
       //Calendar time = Calendar.getInstance();
       //time.clear();
       //time.setTime(date);
       //int max=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天數
       //System.out.println(max);
       
       //獲取開始月的最大天數;大月是1,3,5,7,8,10,12;小月是4,6,9,11;特殊月是2
       int max = 0;
       if (startMonth == 1) {
        if (isLeapYear) {
         max = 29;
        }
        if (!isLeapYear) {
         max = 28;
        }
       }
       if (startMonth == 3 || startMonth == 5 || startMonth == 8 || startMonth == 10) {
        max = 30;
       }
       if (startMonth == 0 || startMonth == 2 || startMonth == 4 || startMonth == 6 || startMonth == 7 || startMonth == 9 || startMonth == 11) {
        max = 31;
       }
       
       //循環每個月
       //如果在日期范圍內月份循環時自增到了一年的最后一個月就將月份初始化到一月份
       int y = 0;
       //如果是開始日期的第一個年的月數就從開始月數循環
       if (x == startYear) {
        y = startMonth;
       }
       for (; y < 12; y++) { 
        
        //獲取當月的最大天數;大月是1,3,5,7,8,10,12;小月是4,6,9,11;特殊月是2
        max = 0;
        if (y == 1) {
         if (isLeapYear) {
          max = 29;
         }
         if (!isLeapYear) {
          max = 28;
         }
        }
        if (y == 3 || y == 5 || y == 8 || y == 10) {
         max = 30;
        }
        if (y == 0 || y == 2 || y == 4 || y == 6 || y == 7 || y == 9 || y == 11) {
         max = 31;
        }
        
        int ty = y + 1;
        System.out.println(x + "年" + ty + "月");
        
        //循環每一天
        int z = 1;
        //如果是開始日期的第一個月的天數就從開始天數循環
        if (x == startYear && y == startMonth) {
         z = startDay;
        }
        for (; z <= max; z++) {
         count++;
         String str = x + "年" + ty + "月" + z + "日";//日期格式可以調整
         System.out.println(str);     
         dateList.add(str);
         double val = x + y * z * 100;//實際的值應該從數據庫中獲取
         valList.add(new Double(val));
         if (x == endYear && y == endMonth && z == endDay) {
          break;
         }
        }


        //如果已經遍歷過了截至日期的最后月份就中止月份的循環
        if (x == endYear && y == endMonth) {
         break;
        }
       
       }
      }
      
      System.out.println(start + " 到 " + end + " 的天數差:" + count);
      
     
      
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      String[] rowKeys = { "上限值", "下限值", "重量" };
      String[] columnKeys = new String[count];
      double[][] data = new double[3][count];
      
      for (int i = 0; i < count; i++) {
       columnKeys[i] = dateList.get(i);
       data[0][i] = 2500;
       data[1][i] = 1500;
       data[2][i] = valList.get(i).doubleValue();
      }
      
      
      ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);  
      
      JFreeChart chart = ChartFactory.createLineChart("工藝秤日稱重重量趨勢圖", "日期", "總量",
        dataset, PlotOrientation.VERTICAL, true, true, false);

      chart.setTextAntiAlias(false);
      chart.setBackgroundPaint(Color.WHITE);
      // 設置圖標題的字體重新設置title
      Font font = new Font("隸書", Font.BOLD, 25);
      TextTitle title = new TextTitle("工藝秤日稱重重量趨勢圖");
      title.setFont(font);
      chart.setTitle(title);
      // 設置面板字體
      Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);

      chart.setBackgroundPaint(Color.WHITE);

      CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
      // x軸 // 分類軸網格是否可見
      categoryplot.setDomainGridlinesVisible(true);
      // y軸 //數據軸網格是否可見
      categoryplot.setRangeGridlinesVisible(true);

      categoryplot.setRangeGridlinePaint(Color.WHITE);// 虛線色彩

      categoryplot.setDomainGridlinePaint(Color.WHITE);// 虛線色彩

      categoryplot.setBackgroundPaint(Color.lightGray);

      // 設置軸和面板之間的距離
      // categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));

      CategoryAxis domainAxis = categoryplot.getDomainAxis();

      domainAxis.setLabelFont(labelFont);// 軸標題

      domainAxis.setTickLabelFont(labelFont);// 軸數值

      domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 橫軸上的
      // Lable
      // 45度傾斜
      // 設置距離圖片左端距離

      domainAxis.setLowerMargin(0.0);
      // 設置距離圖片右端距離
      domainAxis.setUpperMargin(0.0);

      NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
      numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
      numberaxis.setAutoRangeIncludesZero(true);

      // 獲得renderer 注意這里是下嗍造型到lineandshaperenderer!!
      LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot
        .getRenderer();

      lineandshaperenderer.setBaseShapesVisible(true); // series 點(即數據點)可見

      lineandshaperenderer.setBaseLinesVisible(true); // series 點(即數據點)間有連線可見

      // 顯示折點數據
      // lineandshaperenderer.setBaseItemLabelGenerator(new
      // StandardCategoryItemLabelGenerator());
      // lineandshaperenderer.setBaseItemLabelsVisible(true);

      //打印到服務器
      FileOutputStream fos_jpg = null;
      //String dirs = "C:/workspace/test/map/";
      String dirs = "F:/test/";
      String fileName = "lineAndShap.png";
      String chartName = dirs + fileName;
      try {
       File file = new File(dirs);
       if (!file.exists()) {
        file.mkdirs();
       }   
       fos_jpg = new FileOutputStream(chartName);

       // 將報表保存為png文件
       ChartUtilities.writeChartAsPNG(fos_jpg, chart, 1500, 510);
      } catch (Exception e) {
       e.printStackTrace();
       return null;
      } finally {
       try {
        fos_jpg.close();
        System.out.println("ok");
       } catch (Exception e) {
        e.printStackTrace();
       }
      }
      
      //輸出到瀏覽器
      return categoryplot;
     }
     
    servlet的doGet方法中代碼

      response.setContentType("text/html");
      System.out.println("line");
      
      String factory = request.getParameter("factory");
      System.out.println(factory);
      
      MyLineAndShapeChart my = new MyLineAndShapeChart();
      CategoryPlot mm = new CategoryPlot();
      try {
       mm = my.getLineAndShapeChart();
      } catch (ParseException e) {
       e.printStackTrace();
      }
      JFreeChart chart = new JFreeChart("ssssssss", JFreeChart.DEFAULT_TITLE_FONT,
        mm, true);
      ChartRenderingInfo info = new ChartRenderingInfo(
        new StandardEntityCollection());
      String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
        info, request.getSession());

      String graphURL = request.getContextPath()
        + "/servlet/DisplayChart?filename=" + filename;

      RequestDispatcher rd = request.getRequestDispatcher("../form/g.jsp");
      request.getSession().setAttribute("filename", filename);
      request.getSession().setAttribute("graphURL", graphURL);
      rd.forward(request, response);
     
    webInfo下的g.jsp代碼
    <%@ page contentType="text/html;charset=GBK"%>
    <HTML>
     <HEAD>
     </HEAD>
     <BODY>
      <P ALIGN="CENTER">
       <img src="${graphURL}" width=500 height=300 border=0
        usemap="${filename}">
      </P>
     </BODY>
    </HTML>

     web.xml 文件中內容(重要)

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     
     <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>  
    <servlet-name>AServlet</servlet-name>
      <servlet-class>servlet.AServlet</servlet-class>
     </servlet>
     <servlet-mapping>
      <servlet-name>AServlet</servlet-name>
      <url-pattern>/servlet/AServlet</url-pattern>
     </servlet-mapping>
    </web-app>



    柳德才
    13691193654
    18942949207
    QQ:422157370
    liudecai_zan@126.com
    湖北-武漢-江夏-廟山

    posted on 2009-01-14 11:47 liudecai_zan@126.com 閱讀(2247) 評論(2)  編輯  收藏 所屬分類: JFreeChart

    評論

    # re: 生成兩個日期間的以天為間隔的折線圖(web方式和控制臺方式) 2009-01-14 13:07 yz

    有個圖看就好了!  回復  更多評論   

    # re: 生成兩個日期間的以天為間隔的折線圖(web方式和控制臺方式) 2009-01-15 08:29 liudecai_zan@126.com

    計劃數據要從數據庫中取,在這里為了簡化就用簡單方式處理是數據不一樣一邊看出效果,但是效果肯定不夠真實,所以就。。。。。。
    double val = x + y * z * 100;//實際的值應該從數據庫中獲取  回復  更多評論   

    主站蜘蛛池模板: 亚洲精品第一综合99久久| 亚洲αv在线精品糸列| 中日韩亚洲人成无码网站| 亚洲电影在线免费观看| 亚洲理论片在线观看| 在线免费观看国产| 91午夜精品亚洲一区二区三区| 一级毛片免费观看| 亚洲精品日韩中文字幕久久久| 免费观看激色视频网站(性色)| 亚洲欧洲久久精品| 久久精品无码一区二区三区免费| 最新亚洲卡一卡二卡三新区| 四虎成人免费网站在线| 国产精品亚洲一区二区三区久久| 国产无遮挡吃胸膜奶免费看| 一日本道a高清免费播放| 亚洲国产三级在线观看| 18禁黄网站禁片免费观看不卡| 亚洲白色白色永久观看| 成人黄动漫画免费网站视频 | 亚洲午夜在线播放| 麻豆成人精品国产免费| 免费人成又黄又爽的视频在线电影| 亚洲国产精品碰碰| 无码成A毛片免费| 亚洲色欲色欲www在线播放| 日韩精品电影一区亚洲| 国偷自产一区二区免费视频| 亚洲精品视频免费在线观看| 黄网址在线永久免费观看| 久久www免费人成精品香蕉| 亚洲国产女人aaa毛片在线 | 久久国产免费福利永久| 亚洲爆乳少妇无码激情| 亚洲中文字幕在线观看| 国内精品免费麻豆网站91麻豆| 粉色视频免费入口| 久久久久亚洲AV无码永不| 国产一区二区视频免费| 人人玩人人添人人澡免费|