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

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

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

    廉頗老矣,尚能飯否

    java:從技術(shù)到管理

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

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

    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;

    /**
     * 生成兩個(gè)日期間的以天為間隔的折線圖
     * @throws ParseException
     */
    public class MyLineAndShapeChart {
     public CategoryPlot getLineAndShapeChart() throws ParseException {  
    //準(zhǔn)備生成數(shù)據(jù)源需要的要素
      List<String> dateList = new ArrayList<String>();
      List<Double> valList = new ArrayList<Double>();
      
      String start = "2008-01-21";
      String end = "2008-02-08";
      //字符串轉(zhuǎn)換成日期
      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,中國(guó)的月份從1到12");
      System.out.println("下面輸入的是中國(guó)的日期.注意其中的轉(zhuǎn)換問(wèn)題");
      System.out.println("start date : " + start);
      System.out.println("end date : " + end);
      
      int count = 0;
      for (int x = startYear; x <= endYear; x++) {
       //羅馬歷法產(chǎn)生年份公元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);
       
       //獲取開始月的最大天數(shù)
       //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);//本月份的天數(shù)
       //System.out.println(max);
       
       //獲取開始月的最大天數(shù);大月是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;
       }
       
       //循環(huán)每個(gè)月
       //如果在日期范圍內(nèi)月份循環(huán)時(shí)自增到了一年的最后一個(gè)月就將月份初始化到一月份
       int y = 0;
       //如果是開始日期的第一個(gè)年的月數(shù)就從開始月數(shù)循環(huán)
       if (x == startYear) {
        y = startMonth;
       }
       for (; y < 12; y++) { 
        
        //獲取當(dāng)月的最大天數(shù);大月是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 + "月");
        
        //循環(huán)每一天
        int z = 1;
        //如果是開始日期的第一個(gè)月的天數(shù)就從開始天數(shù)循環(huán)
        if (x == startYear && y == startMonth) {
         z = startDay;
        }
        for (; z <= max; z++) {
         count++;
         String str = x + "年" + ty + "月" + z + "日";//日期格式可以調(diào)整
         System.out.println(str);     
         dateList.add(str);
         double val = x + y * z * 100;//實(shí)際的值應(yīng)該從數(shù)據(jù)庫(kù)中獲取
         valList.add(new Double(val));
         if (x == endYear && y == endMonth && z == endDay) {
          break;
         }
        }


        //如果已經(jīng)遍歷過(guò)了截至日期的最后月份就中止月份的循環(huán)
        if (x == endYear && y == endMonth) {
         break;
        }
       
       }
      }
      
      System.out.println(start + " 到 " + end + " 的天數(shù)差:" + 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("工藝秤日稱重重量趨勢(shì)圖", "日期", "總量",
        dataset, PlotOrientation.VERTICAL, true, true, false);

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

      chart.setBackgroundPaint(Color.WHITE);

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

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

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

      categoryplot.setBackgroundPaint(Color.lightGray);

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

      CategoryAxis domainAxis = categoryplot.getDomainAxis();

      domainAxis.setLabelFont(labelFont);// 軸標(biāo)題

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

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

      domainAxis.setLowerMargin(0.0);
      // 設(shè)置距離圖片右端距離
      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 點(diǎn)(即數(shù)據(jù)點(diǎn))可見

      lineandshaperenderer.setBaseLinesVisible(true); // series 點(diǎn)(即數(shù)據(jù)點(diǎn))間有連線可見

      // 顯示折點(diǎn)數(shù)據(jù)
      // lineandshaperenderer.setBaseItemLabelGenerator(new
      // StandardCategoryItemLabelGenerator());
      // lineandshaperenderer.setBaseItemLabelsVisible(true);

      //打印到服務(wù)器
      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);

       // 將報(bào)表保存為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 文件中內(nèi)容(重要)

    <?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) 評(píng)論(2)  編輯  收藏 所屬分類: JFreeChart

    評(píng)論

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

    有個(gè)圖看就好了!  回復(fù)  更多評(píng)論   

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

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

    主站蜘蛛池模板: 亚洲色中文字幕在线播放| 两个人的视频www免费| 一道本不卡免费视频| 亚洲欧洲日产国码www| 一个人免费观看视频www| 99视频在线观看免费| 黄色一级免费网站| 亚洲一卡2卡3卡4卡5卡6卡| 亚洲国产精品国自产电影| 亚洲欧洲日产国码高潮αv| 性感美女视频在线观看免费精品 | 色欲A∨无码蜜臀AV免费播| 色屁屁在线观看视频免费| 亚洲一线产区二线产区区| 18gay台湾男同亚洲男同| 亚洲AV永久精品爱情岛论坛| 亚洲色婷婷综合开心网| 国产成人免费a在线资源| 一进一出60分钟免费视频| 丰满亚洲大尺度无码无码专线| 亚洲无码高清在线观看| 国产免费av片在线无码免费看| 永久免费AV无码网站国产| 一区二区三区免费视频观看 | 无码不卡亚洲成?人片| 嫩草影院在线免费观看| 成人性生活免费视频| 国产精品69白浆在线观看免费| 免费视频爱爱太爽了| 久热中文字幕在线精品免费| 99国产精品免费观看视频| 91在线老王精品免费播放| 美丽的姑娘免费观看在线播放| 亚洲视频免费在线播放| 久久国产精品成人片免费| 67194国产精品免费观看| 91麻豆国产免费观看| 24小时日本韩国高清免费| 亚欧免费视频一区二区三区| 亚洲人成免费网站| 麻豆一区二区免费播放网站|