高校的项目中一个功能是对统计的成绩进行图表分析,查找了一些资料之后感觉jfreechar上手挺快的,简单的做了几个demo也都很好实现,也能够满足项目中的需求,所以就决定使用这个工具。这里就将学习到的一些关于jfreechar的知识整理一下。
使用这个工具一定要将他的包引入的到项目,在高校的项目中使采用maven管理这些外部文件的,所以对于引入jar包这一步就变得特别简单了,只要在maven项目的pom.xml文件中添加jfreechar的依赖就可以(maven会自动在仓库中检索jar包然后下载到本地)
<dependency> <span style="white-space:pre"> </span> <groupId>jfreechart</groupId> <artifactId>jfreechart</artifactId> <version>1.0.0</version> </dependency>
之后我们就会在Maven Depenencies中看到jfreechar需要的jar包了(如果没有的话可以update project—快捷键是ALT+F5)。
在web.xml文件中添加如下代码
<!-- jfreechart报表配置 --> <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>/chart</url-pattern> </servlet-mapping>
上面两步就是jfreechar和springMVC+maven的整合。
下面就做一个小例子来熟悉一个这个工具—创建一个柱形图
web层中controller中代码
package com.tgb.itoo.chart.controller; import java.awt.Font; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jfree.chart.ChartColor; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.servlet.ServletUtilities; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class ColumnChartController { @RequestMapping("/resultmap") public String resultmap(){ return "/resultmap"; } //显示柱状图 @RequestMapping(value = "/getColumnChart") public ModelAndView getColumnChart(HttpServletRequest request,HttpServletResponse response, ModelMap modelMap) throws Exception{ //1. 获得数据集合 CategoryDataset dataset = getDataSet(); //2. 创建柱状图 JFreeChart chart = ChartFactory.createBarChart3D("学生对教师授课满意度", // 图表标题 "课程名", // 目录轴的显示标签 "百分比", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 false, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); //3. 设置整个柱状图的颜色和文字(char对象的设置是针对整个图形的设置) chart.setBackgroundPaint(ChartColor.WHITE); // 设置总的背景颜色 //4. 获得图形对象,并通过此对象对图形的颜色文字进行设置 CategoryPlot p = chart.getCategoryPlot();// 获得图表对象 p.setBackgroundPaint(ChartColor.lightGray);//图形背景颜色 p.setRangeGridlinePaint(ChartColor.WHITE);//图形表格颜色 //5. 设置柱子宽度 BarRenderer renderer = (BarRenderer)p.getRenderer(); renderer.setMaximumBarWidth(0.06); //解决乱码问题 getChartByFont(chart); //6. 将图形转换为图片,传到前台 String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400, null, request.getSession()); String chartURL=request.getContextPath() + "/chart?filename="+fileName; modelMap.put("chartURL", chartURL); return new ModelAndView("resultmap",modelMap); } //设置文字样式 private static void getChartByFont(JFreeChart chart) { //1. 图形标题文字设置 TextTitle textTitle = chart.getTitle(); textTitle.setFont(new Font("宋体",Font.BOLD,20)); //2. 图形X轴坐标文字的设置 CategoryPlot plot = (CategoryPlot) chart.getPlot(); CategoryAxis axis = plot.getDomainAxis(); axis.setLabelFont(new Font("宋体",Font.BOLD,22)); //设置X轴坐标上标题的文字 axis.setTickLabelFont(new Font("宋体",Font.BOLD,15)); //设置X轴坐标上的文字 //2. 图形Y轴坐标文字的设置 ValueAxis valueAxis = plot.getRangeAxis(); valueAxis.setLabelFont(new Font("宋体",Font.BOLD,15)); //设置Y轴坐标上标题的文字 valueAxis.setTickLabelFont(new Font("sans-serif",Font.BOLD,12));//设置Y轴坐标上的文字 } // 获取一个演示用的组合数据集对象 private static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(40, "", "普通动物学"); dataset.addValue(50, "", "生物学"); dataset.addValue(60, "", "动物解剖学"); dataset.addValue(70, "", "生物理论课"); dataset.addValue(80, "", "动物理论课"); return dataset; } }
spring-mvc中的配置
<bean name="columnChartController" class="com.tgb.itoo.chart.controller.ColumnChartController" />
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> </head> <body> <div style="text-align:center"> jfreechart _3D柱状图 <br><br> 点击显示柱状图<a href="getColumnChart">getMajorChart</a> <br><br> <img src="${chartURL}" width=600 height=400 border=0 color=gray> </div> </body> </html>
原文地址:http://blog.csdn.net/y_love_f/article/details/43120815