jfreechart和springMVC+maven整合,springmvcmaven
高校的項目中一個功能是對統計的成績進行圖表分析,尋找了一些資料之後感覺jfreechar上手挺快的,簡單的做了幾個demo也都很好實現,也能夠滿足項目中的需求,所以就決定使用這個工具。這裡就將學習到的一些關於jfreechar的知識整理一下。
1. 引入jar包
使用這個工具一定要將他的包引入的到項目,在高校的項目中使採用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)。
2. 修改web.xml檔案
在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的整合。
3. 實現一個直條圖
下面就做一個小例子來熟悉一個這個工具—建立一個直條圖
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;@Controllerpublic 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" />
web層中jsp頁面
<%@ 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>
結果展示: