JFreeChart 的几则应用之jsp篇。

配置一个serverlet然后调用jFreeChart的一个类。

之间需要的jar包包括: 
jfreechart-1.0.5.jar
jcommon-1.0.9.jar
gnujaxp.jar

这些开源jar包和JDOC在jfree的主站就能下载得到:
http://www.jfree.org/index.php

但是,这个的帮助文档却是收费的所以一些相关的论坛和比较好的实例网站需要提供两个:
http://www.jfree.org/phpBB2/index.php (这个是jfree自己的论坛,主要是一些bug或者比较难以实现的东西会在这里讨论)
http://www.java2s.com/Code/Java/Chart1.htm (非常全的实例加源代码的网站)

配置文件如下,在web.xml配置文件中加入下的serverlet配置代码:

   < 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 > /servletDisplayChart </ url-pattern >
 
</ servlet-mapping >

 

当配置好这些文件后,就可以直接在jsp页面中作实例了(我要做的是一个一时间为X坐标,数字为Y坐标的JFREECHART):

jsp页面中需要加载的JFreeChart的包包括:

<% @ page import="org.jfree.chart.ChartFactory" %>
<% @ page import="org.jfree.chart.JFreeChart" %>
<% @ page import="org.jfree.chart.servlet.ServletUtilities" %>
<% @ page import="org.jfree.chart.axis.DateAxis" %>
<% @ page import="org.jfree.chart.axis.NumberAxis" %>
<% @ page import="org.jfree.chart.labels.StandardXYToolTipGenerator" %>
<% @ page import="org.jfree.chart.plot.XYPlot" %>
<% @ page import="org.jfree.chart.renderer.xy.XYLineAndShapeRenderer" %>
<% @ page import="org.jfree.data.time.Hour" %>
<% @ page import="org.jfree.data.time.TimeSeries" %>
<% @ page import="org.jfree.data.Range" %>
<% @ page import="org.jfree.data.time.TimeSeriesCollection" %>

 

直接进入程序:

List title2List  =  (List)request.getAttribute( " title2List " ); // 图表中需要显示的几个数据线的名称
  
// title2List的结构实例:[日付, 体温, 最大血圧, 最小血圧, 脈拍]除了第一个是x坐标的总称,其它都是数据线的名称
  List data2List  =  (List)request.getAttribute( " data2List " ); // 几个数据线的具体数据
   /*data2List的结构实例:[[06/10, 36, 120, 60, 60], [06/11, 44, 200, 140, 140], [06/12, 36, 120, 60, 60], [06/13, 40, 100, 180, 150], [06/14, , , , ], [06/15, , , , ], [06/16, , , , ], [06/17, , , , ]]结构中第一对应的是日期,其它分别按顺序对应title2List对应的名称*/

  String minDate 
=   "" , maxDate  =   "" ;
  
// minDate,maxDate为了表格X坐标设置上下限用的
  minDate  =  ((List)data2List.get( 0 )).get( 0 ).toString();
  maxDate 
=  ((List)data2List.get(data2List.size() - 1 )).get( 0 ).toString();

  TimeSeriesCollection dataset 
=   new  TimeSeriesCollection(); // 存储各个数据线坐标数据的数据集
  
// 数据采集,如果title2List传递过来的有数据,那么给chart添加一个数据线节点集
   if (title2List.size()  !=   1 ) {
    List tempList 
= (List)data2List.get(0);
    
for(int i = 1; i < tempList.size(); i++){//按类别生成多个数据集
      
//生成一个节点集传入命名和节点和节点的最小单位这里是以小时为单位
      TimeSeries series = new TimeSeries(title2List.get(i).toString(), Hour.class);
      
for(int j = 0; j < data2List.size(); j++){
        List data 
= (List)data2List.get(j);
        
int year = 1982;
        
int month = Integer.parseInt(data.get(0).toString().substring(0,2));
        
int day = Integer.parseInt(data.get(0).toString().substring(3,5));
        
if(data.get(i).toString().length() != 0){
          
double dataValue = Double.parseDouble(data.get(i).toString());
          Hour hour 
= new Hour(12,day,month,year);//为节点设置时间点
          series.add(hour, dataValue);//添加一个节点
        }

      }

      dataset.addSeries(series);
//添加这个节点集到Chart中
    }

  }

  
// 生成图表对象
  JFreeChart chart  =  ChartFactory.createTimeSeriesChart( " バイタル " // 图表的名称
                                                      , request.getAttribute( " x_axis " ).toString() // X坐标的名称
                                                      , request.getAttribute( " y_axis " ).toString() // Y坐标的名称
                                                      , dataset // 生成的节点集的集合
                                                      ,  true
                                                      , 
true
                                                      , 
false
                                                       );

   
// 以下是调节图表的一些属性,包括调节上下限,几个节点集对应的线的颜色,还有节点的形状
   XYPlot plot  =  chart.getXYPlot();
   
// shape the point
    if (title2List.size()  !=   1 ) {/*如果有数据,那么就让图形里的线显示节点形状和颜色。由于我的数据最多就只有4个线,所以这里只做4个线的设置*/
     XYLineAndShapeRenderer renderer 
= new XYLineAndShapeRenderer();
     plot.setRenderer(renderer);
     renderer.setSeriesPaint(
0,Color.BLACK);
     renderer.setSeriesPaint(
1,Color.BLUE);
     renderer.setSeriesPaint(
2,Color.RED);
     renderer.setSeriesPaint(
3,Color.ORANGE);
   }

   
// format the date and range
   DateAxis axis_x  =  (DateAxis) plot.getDomainAxis();
   axis_x.setDateFormatOverride(
new  SimpleDateFormat( " MM/dd " ));
   
int  minYear  =   1982 , minMon, minDay,maxYear  =   1982 , maxMon, maxDay;
   minMon 
=  Integer.parseInt(minDate.substring( 0 , 2 ));
   minDay 
=  Integer.parseInt(minDate.substring( 3 , 5 ));
   maxMon 
=  Integer.parseInt(maxDate.substring( 0 , 2 ));
   maxDay 
=  Integer.parseInt(maxDate.substring( 3 , 5 ));
   axis_x.setRange(
new  Date(minYear - 1900 ,minMon - 1 ,minDay, 0 , 0 , 0 ), new  Date(maxYear - 1900 ,maxMon - 1 ,maxDay, 0 , 0 , 0 )); // x坐标线的范围
   
// range the range axis
   NumberAxis axis_y  =  (NumberAxis) plot.getRangeAxis();
   Range range 
=   new  Range( 0 , 225 ); // y坐标的范围
   axis_y.setRange(range);
   
// background
   chart.setBackgroundPaint(Color.WHITE); // 设置北京颜色或者也可以设置一个背景图片
        
   
// 生成Chart的字符串,serverlet解析并且生成一个图片
  String filename  =  ServletUtilities.saveChartAsPNG(chart,  500 300 null , session);
  String graphURL 
=  request.getContextPath()  +   " /servletDisplayChart?filename= "   +  filename; 

 

在页面中显示的生成的图片方法是:

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

 

以上,就是我这次timer遇到的jsp端的chart生成和显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值