jfreechart和springMVC+maven整合

来源:互联网 发布:网络分为哪几类 编辑:程序博客网 时间:2024/06/07 12:21

转自:http://blog.csdn.net/y_love_f/article/details/43120815

高校的项目中一个功能是对统计的成绩进行图表分析,查找了一些资料之后感觉jfreechar上手挺快的,简单的做了几个demo也都很好实现,也能够满足项目中的需求,所以就决定使用这个工具。这里就将学习到的一些关于jfreechar的知识整理一下。

1.    引入jar包

       使用这个工具一定要将他的包引入的到项目,在高校的项目中使采用maven管理这些外部文件的,所以对于引入jar包这一步就变得特别简单了,只要在maven项目的pom.xml文件中添加jfreechar的依赖就可以(maven会自动在仓库中检索jar包然后下载到本地)

[html] view plain copy
 print?
  1. <dependency>  
  2. lt;span style="white-space:pre"> </span>    <groupId>jfreechart</groupId>  
  3.     <artifactId>jfreechart</artifactId>  
  4.     <version>1.0.0</version>  
  5. </dependency>  

之后我们就会在Maven Depenencies中看到jfreechar需要的jar包了(如果没有的话可以update project—快捷键是ALT+F5)。


2.    修改web.xml文件

在web.xml文件中添加如下代码

[html] view plain copy
 print?
  1. <!-- jfreechart报表配置 -->  
  2.     <servlet>  
  3.         <servlet-name>DisplayChart</servlet-name>  
  4.         <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>  
  5.     </servlet>  
  6.     <servlet-mapping>  
  7.         <servlet-name>DisplayChart</servlet-name>  
  8.         <url-pattern>/chart</url-pattern>  
  9. </servlet-mapping>  


上面两步就是jfreechar和springMVC+maven的整合。

 

3. 实现一个柱形图

下面就做一个小例子来熟悉一个这个工具—创建一个柱形图

 

web层中controller中代码

[java] view plain copy
 print?
  1. package com.tgb.itoo.chart.controller;  
  2.   
  3. import java.awt.Font;  
  4.   
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7.   
  8. import org.jfree.chart.ChartColor;  
  9. import org.jfree.chart.ChartFactory;  
  10. import org.jfree.chart.JFreeChart;  
  11. import org.jfree.chart.axis.CategoryAxis;  
  12. import org.jfree.chart.axis.ValueAxis;  
  13. import org.jfree.chart.plot.CategoryPlot;  
  14. import org.jfree.chart.plot.PlotOrientation;  
  15. import org.jfree.chart.renderer.category.BarRenderer;  
  16. import org.jfree.chart.servlet.ServletUtilities;  
  17. import org.jfree.chart.title.TextTitle;  
  18. import org.jfree.data.category.CategoryDataset;  
  19. import org.jfree.data.category.DefaultCategoryDataset;  
  20. import org.springframework.stereotype.Controller;  
  21. import org.springframework.ui.ModelMap;  
  22. import org.springframework.web.bind.annotation.RequestMapping;  
  23. import org.springframework.web.servlet.ModelAndView;  
  24.   
  25. @Controller  
  26. public class ColumnChartController {  
  27.       
  28.     @RequestMapping("/resultmap")  
  29.     public String resultmap(){  
  30.         return "/resultmap";  
  31.     }  
  32.       
  33.     //显示柱状图  
  34.     @RequestMapping(value = "/getColumnChart")  
  35.     public ModelAndView getColumnChart(HttpServletRequest request,HttpServletResponse response, ModelMap modelMap) throws Exception{  
  36.         //1. 获得数据集合  
  37.         CategoryDataset dataset = getDataSet();  
  38.         //2. 创建柱状图  
  39.         JFreeChart chart = ChartFactory.createBarChart3D("学生对教师授课满意度"// 图表标题  
  40.                 "课程名"// 目录轴的显示标签  
  41.                 "百分比"// 数值轴的显示标签  
  42.                 dataset, // 数据集  
  43.                 PlotOrientation.VERTICAL, // 图表方向:水平、垂直  
  44.                 false// 是否显示图例(对于简单的柱状图必须是false)  
  45.                 false// 是否生成工具  
  46.                 false // 是否生成URL链接  
  47.                 );  
  48.         //3. 设置整个柱状图的颜色和文字(char对象的设置是针对整个图形的设置)  
  49.         chart.setBackgroundPaint(ChartColor.WHITE); // 设置总的背景颜色  
  50.           
  51.         //4. 获得图形对象,并通过此对象对图形的颜色文字进行设置  
  52.         CategoryPlot p = chart.getCategoryPlot();// 获得图表对象  
  53.         p.setBackgroundPaint(ChartColor.lightGray);//图形背景颜色  
  54.         p.setRangeGridlinePaint(ChartColor.WHITE);//图形表格颜色  
  55.           
  56.         //5. 设置柱子宽度  
  57.         BarRenderer renderer = (BarRenderer)p.getRenderer();  
  58.         renderer.setMaximumBarWidth(0.06);  
  59.           
  60.         //解决乱码问题  
  61.         getChartByFont(chart);  
  62.           
  63.         //6. 将图形转换为图片,传到前台  
  64.         String fileName = ServletUtilities.saveChartAsJPEG(chart, 700400null, request.getSession());  
  65.         String chartURL=request.getContextPath() + "/chart?filename="+fileName;  
  66.         modelMap.put("chartURL", chartURL);  
  67.         return new ModelAndView("resultmap",modelMap);  
  68.     }  
  69.       
  70.     //设置文字样式  
  71.     private static void getChartByFont(JFreeChart chart) {  
  72.         //1. 图形标题文字设置  
  73.         TextTitle textTitle = chart.getTitle();     
  74.         textTitle.setFont(new Font("宋体",Font.BOLD,20));  
  75.           
  76.         //2. 图形X轴坐标文字的设置  
  77.         CategoryPlot plot = (CategoryPlot) chart.getPlot();  
  78.         CategoryAxis axis = plot.getDomainAxis();  
  79.         axis.setLabelFont(new Font("宋体",Font.BOLD,22));  //设置X轴坐标上标题的文字  
  80.         axis.setTickLabelFont(new Font("宋体",Font.BOLD,15));  //设置X轴坐标上的文字  
  81.           
  82.       //2. 图形Y轴坐标文字的设置  
  83.         ValueAxis valueAxis = plot.getRangeAxis();  
  84.         valueAxis.setLabelFont(new Font("宋体",Font.BOLD,15));  //设置Y轴坐标上标题的文字  
  85.         valueAxis.setTickLabelFont(new Font("sans-serif",Font.BOLD,12));//设置Y轴坐标上的文字  
  86.     }  
  87.   
  88.     // 获取一个演示用的组合数据集对象  
  89.     private static CategoryDataset getDataSet() {  
  90.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  91.         dataset.addValue(40"""普通动物学");  
  92.         dataset.addValue(50"""生物学");  
  93.         dataset.addValue(60"""动物解剖学");  
  94.         dataset.addValue(70"""生物理论课");  
  95.         dataset.addValue(80"""动物理论课");  
  96.         return dataset;  
  97.     }  
  98. }  


spring-mvc中的配置

[html] view plain copy
 print?
  1. <bean name="columnChartController"  class="com.tgb.itoo.chart.controller.ColumnChartController" />  


web层中jsp页面 resultmap.jsp

[plain] view plain copy
 print?
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.  <head>  
  9.    <base href="<%=basePath%>">  
  10.  </head>  
  11.   <body>  
  12.       <div  style="text-align:center">  
  13.            jfreechart _3D柱状图 <br><br>  
  14.           点击显示柱状图<a href="getColumnChart">getMajorChart</a>  
  15.          <br><br>  
  16.          <img src="${chartURL}"  width=600 height=400  border=0  color=gray>  
  17.       </div>  
  18.         
  19.   </body>  
  20. </html>  

结果展示:

原创粉丝点击