jfreechart采用TimeSeriesChart并更改热点内容

来源:互联网 发布:淘宝免运费怎么设置 编辑:程序博客网 时间:2024/06/18 17:40
 
/** *  */package com.huaxia.bank.test;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Toolkit;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.text.DateFormat;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.axis.DateTickUnit;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.labels.StandardCategoryToolTipGenerator;import org.jfree.chart.labels.StandardXYToolTipGenerator;import org.jfree.chart.labels.XYToolTipGenerator;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.StandardXYItemRenderer;import org.jfree.chart.renderer.xy.XYItemRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.time.Day;import org.jfree.data.time.Hour;import org.jfree.data.time.Month;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import org.jfree.ui.ApplicationFrame;import org.jfree.ui.RectangleInsets;/** * @author cuiran * */public class TimeSeriesTest  {  public final static String MONTH = "MONTH";  public final static String DAY = "DAY";  public final static String HOUR = "HOUR";    private JFreeChart rChart = null;     //图表对象  public String chartTitle = "";        //图表标题  public String chartXdesc = "";        //X轴标题  public String chartYdesc = "";        //Y轴标题  public String chartSeriesDesc = "";   //曲线说明  public String chartSeriesDesc1 = "";   //曲线说明  public int graphWidth = 600;          //默认宽度  public int graphHigh = 400;           //默认高度  public String timeFormat = "MM/yyyy"; // 按日:MM-dd ,按小时:hh:mm  // 用于标志用户选择的是按哪种查询统计周期类型(年、月、天、小时).  // 年:YEAR, 月:MONTH, 天:DAY, 小时:HOUR  public String periodType = "";  // 用于确定时间间隔  public int dateInterval = 1;    //统计结果数据集  TimeSeriesCollection statDataset = new TimeSeriesCollection();    TimeSeries monthSeries = null;  //月份统计图数据集合  TimeSeries monthSeries1 = null;  //月份统计图数据集合  TimeSeries daySeries = null;    //天数统计图数据集合  TimeSeries hourSeries = null;   //小时统计图数据集合      public void createTread(){    setTimeSeriesStatType();  }   /**   * 创建趋势图表   * @return JFreeChart 图表对象JFreeChart   */  private JFreeChart createTrendChart(){    JFreeChart _freeChart = ChartFactory.createTimeSeriesChart(chartTitle, chartXdesc, chartYdesc,         getTimeSeriesStatDataSet(), true, true, true);    _freeChart.setBackgroundPaint(Color.white);        XYPlot _xyplot = _freeChart.getXYPlot();        _xyplot.setOrientation(PlotOrientation.VERTICAL);        _xyplot.setBackgroundPaint(Color.lightGray);    _xyplot.setDomainGridlinePaint(Color.white);    _xyplot.setRangeGridlinePaint(Color.white);       _xyplot.setAxisOffset(new RectangleInsets(1.0, 2.0, 2.0, 10.0));   XYItemRenderer renderer= _xyplot.getRenderer();   DateFormat df=new SimpleDateFormat("yyyy年MM月");   NumberFormat nf= NumberFormat.getNumberInstance();   StandardXYToolTipGenerator toolg=new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,df,nf);      renderer.setToolTipGenerator(toolg);//          DateAxis dateaxis = (DateAxis) _xyplot.getDomainAxis();    if (periodType.equalsIgnoreCase("MONTH")){      if (dateInterval > 0) {        dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, dateInterval));      }    }else if (periodType.equalsIgnoreCase("DAY")){      if (dateInterval > 0) {        dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.DAY, dateInterval));      }    }else if (periodType.equalsIgnoreCase("HOUR")){      if (dateInterval > 0) {        dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.HOUR, dateInterval));      }    }        dateaxis.setDateFormatOverride(new SimpleDateFormat(timeFormat));        return _freeChart;  }    /**   * 增加走势图数据   * @param periodType 区间类型   * @param year  年份   * @param month 月份   * @param day   日期   * @param hour  时间   * @param statData 统计数据   */  public void addTimeSeriesUnitData(int year, int month,int statData) {    if (periodType.equalsIgnoreCase("MONTH")){      if (monthSeries == null){        monthSeries = new TimeSeries(chartSeriesDesc,Month.class);      }      monthSeries.add(new Month(month, year), statData);      System.out.println("月");    }else if (periodType.equalsIgnoreCase("DAY")){      if (daySeries == null){        daySeries = new TimeSeries(chartSeriesDesc, Day.class);      }//      daySeries.add(new Day(day, month, year), statData);    }else if (periodType.equalsIgnoreCase("HOUR")){      if (hourSeries == null){        hourSeries = new TimeSeries(chartSeriesDesc, Hour.class);      }//      hourSeries.add(new Hour(hour, day, month, year), statData);    }  }  /**   * 增加走势图数据   * @param periodType 区间类型   * @param year  年份   * @param month 月份   * @param day   日期   * @param hour  时间   * @param statData 统计数据   */  public void addTimeSeriesUnitDataAll(int year, int month,int statData) {    if (periodType.equalsIgnoreCase("MONTH")){      if (monthSeries1 == null){      monthSeries1 = new TimeSeries(chartSeriesDesc1,Month.class);      }      monthSeries1.add(new Month(month, year), statData);      System.out.println("月");    }else if (periodType.equalsIgnoreCase("DAY")){      if (daySeries == null){        daySeries = new TimeSeries(chartSeriesDesc1, Day.class);      }//      daySeries.add(new Day(day, month, year), statData);    }else if (periodType.equalsIgnoreCase("HOUR")){      if (hourSeries == null){        hourSeries = new TimeSeries(chartSeriesDesc1, Hour.class);      }//      hourSeries.add(new Hour(hour, day, month, year), statData);    }  }  /**   * 设置走势图统计的区间类型   * @param periodType 区间类型   */  private void setTimeSeriesStatType() {    if (periodType.equalsIgnoreCase("MONTH")){      statDataset.addSeries(monthSeries);      statDataset.addSeries(monthSeries1);    }else if (periodType.equalsIgnoreCase("DAY")){      statDataset.addSeries(daySeries);    }else if (periodType.equalsIgnoreCase("HOUR")){      statDataset.addSeries(hourSeries);    }  }    /**   * 获得时序图的统计数据   * @return XYDataset 统计数据   */  private XYDataset getTimeSeriesStatDataSet() {    statDataset.setDomainIsPointsInTime(true);    return statDataset;  }  public int getDateInterval() {    return dateInterval;  }   //字体配置方法(解决中文问题)    private static void configFont(JFreeChart chart) {        // 配置字体        Font xfont = new Font("宋体", Font.PLAIN, 12);// X轴        Font yfont = new Font("宋体", Font.PLAIN, 12);// Y轴        Font kfont = new Font("宋体", Font.PLAIN, 12);// 底部        Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题        XYPlot plot =  chart.getXYPlot();// 图形的绘制结构对象               // 图片标题        chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));        // 底部//        chart.getLegend().setItemFont(kfont);     // 横轴框里的标题字体        chart.getLegend().setItemFont(kfont);        // 横轴列表字体        plot.getDomainAxis().setTickLabelFont(kfont);        // 横轴小标题字体        plot.getDomainAxis().setLabelFont(kfont);        // Y 轴        ValueAxis rangeAxis = plot.getRangeAxis();        rangeAxis.setLabelFont(yfont);        rangeAxis.setLabelPaint(Color.BLUE); // 字体颜色        rangeAxis.setTickLabelFont(yfont);    }  public void setDateInterval(int dateInterval) {    this.dateInterval = dateInterval;  }  public static void main(String arhs[]){  TimeSeriesTest trendChart = new TimeSeriesTest();  trendChart.chartTitle = "一年走势图";  trendChart.chartSeriesDesc = "确认数量";  trendChart.chartSeriesDesc1 = "风险数量";  trendChart.chartXdesc = "月份";  trendChart.chartYdesc = "数量";  trendChart.graphHigh = 400;  trendChart.graphWidth = 600;  trendChart.timeFormat = "yyyy年MM月";  trendChart.periodType = TimeSeriesTest.MONTH;    double baseData = 100.0;  double rData = baseData;    trendChart.addTimeSeriesUnitData(2011, 11,25);  trendChart.addTimeSeriesUnitData(2011, 12,45);  trendChart.addTimeSeriesUnitData(2012, 1, 50);  trendChart.addTimeSeriesUnitData(2012, 2,  80);  trendChart.addTimeSeriesUnitData(2012, 3, 30);  trendChart.addTimeSeriesUnitData(2012, 4,  10);    trendChart.addTimeSeriesUnitDataAll(2011, 11,45);  trendChart.addTimeSeriesUnitDataAll(2011, 12,65);  trendChart.addTimeSeriesUnitDataAll(2012, 1, 70);  trendChart.addTimeSeriesUnitDataAll(2012, 2,  90);  trendChart.addTimeSeriesUnitDataAll(2012, 3, 50);  trendChart.addTimeSeriesUnitDataAll(2012, 4, 40);      trendChart.createTread();  JFreeChart chart =trendChart.createTrendChart();  trendChart.configFont(chart);  final ChartFrame preview = new ChartFrame("一年走势图",chart);    preview.addWindowListener(new WindowAdapter() {         public void windowClosing(final WindowEvent event) {           preview.dispose();         }       });       preview.pack();       //调整预览窗口的大小和位置,适合屏幕,并且居中//       Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();////       preview.setSize(screenSize.width,screenSize.height-50);//适合屏幕,50表示把工具栏要考虑在内////       Dimension frameSize = preview.getSize();////       if (frameSize.height > screenSize.height) {////         frameSize.height = screenSize.height;////       }////       if (frameSize.width > screenSize.width) {////         frameSize.width = screenSize.width;////       }////       preview.setLocation( (screenSize.width - frameSize.width) / 2,////                  (screenSize.height - frameSize.height-50) / 2);       //显示报表预览窗口       preview.setVisible(true);  }}


运行效果如图:

 

部分代码:

 DateFormat df=new SimpleDateFormat("yyyy年MM月");   NumberFormat nf= NumberFormat.getNumberInstance();   StandardXYToolTipGenerator toolg=new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,df,nf);      renderer.setToolTipGenerator(toolg);

 

加上代码可以显示对应的图点

   XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)_xyplot.getRenderer();  //设置网格背景颜色    _xyplot.setBackgroundPaint(Color.white);  //设置网格竖线颜色    _xyplot.setDomainGridlinePaint(Color.pink);  //设置网格横线颜色    _xyplot.setRangeGridlinePaint(Color.pink);  //设置曲线图与xy轴的距离    _xyplot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));  //设置曲线是否显示数据点  xylineandshaperenderer.setBaseShapesVisible(true);  //设置曲线显示各数据点的值



 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发掉发严重怎么办吃什么 掉了一块钱很气怎么办 头发软又少怎么办盘头 头发出油掉的厉害怎么办 头发很油又少怎么办 18岁头发发量少怎么办 头发少长的慢怎么办 额头大发际线高怎么办 前额两边的头发变少了怎么办 吃减肥药掉头发怎么办 牙长智齿吃饭疼怎么办 头发稀少容易掉发怎么办 大把掉发头发稀少怎么办 头发掉厉害洗生发灵更掉怎么办? 额头两侧和头顶头发少怎么办 额头前面头发少怎么办天生的 头两边的碎头发怎么办 30岁后头发少怎么办 生完孩子头发少怎么办 1岁宝宝头发少怎么办 头顶上的头发少怎么办呢 22岁头顶头发稀少怎么办 头发又稀又少怎么办 头顶的头发越来越少怎么办 四岁宝宝头发稀少怎么办 一岁宝宝头发稀少怎么办 三岁宝宝头发稀少怎么办 头发油急着出门怎么办 长出的头发毛糙弯曲怎么办 头发薄还掉头发怎么办 头发少掉的厉害怎么办 一洗头就掉很多头发怎么办 生完孩子掉头发怎么办 甲减引起的肥胖怎么办 18岁掉头发严重怎么办 5岁儿童掉头发严重怎么办 18头发掉的严重怎么办 甲癌碘131后腮腺肿大怎么办 头发出油发丝细怎么办 25岁总掉头发怎么办 25岁掉头发厉害怎么办