第一步:导入三个JAR包:
gnujaxp.jar
(在SSH整合时会出现冲突可不要,不影响使用),
jcommon-1.0.0.jar,jfreechart-1.0.1.jar
第二步:创建工具类ChartUtil
package com.wnkj.util;
import java.awt.Color;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.entity.StandardEntityCollection ;
import org.jfree.chart.labels.StandardCategoryItemLabe lGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.servlet.ChartDeleter;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
public class ChartUtil {
// 产生时间序列图,返回图片名称
public static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {
String filename = null;
try {
if (session != null)
{
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
session.removeAttribute("JFreeChart_Deleter");
session.setAttribute("JFreeChart_Deleter", deleter);
}
JFreeChart chart = ChartFactory.createPieChart3D(
title, //统计图名字
dataset, // 数据集
true,
true,
false );
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection ());
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
ChartUtilities.writeImageMap(pw, filename, info,true);
pw.flush();
} catch (Exception e) {
e.printStackTrace(System.out);
filename = "picture_error.png"; }
return filename;
}
public static String generateBarChart(DefaultCategoryDataset dataset,String title,String title1,String title2,int width,int height,HttpSession session, PrintWriter pw) {
String filename = null;
try {
if (session != null)
{
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
session.removeAttribute("JFreeChart_Deleter");
session.setAttribute("JFreeChart_Deleter", deleter);
}
PlotOrientation plo = PlotOrientation.VERTICAL;//一定要有,
JFreeChart chart = ChartFactory.createBarChart3D(
title, //统计图的名字
title1, //X轴名字
title2, // Y轴名字
dataset, // 数据集,注意:跟饼图的数据集不一样
plo,
true,
false,
false );
//-------------------------------------------------------------------------
//显示每个柱的数值
CategoryPlot plot = chart.getCategoryPlot();
BarRenderer3D renderer = new BarRenderer3D();
renderer.setItemLabelGenerator(new StandardCategoryItemLabe lGenerator());
renderer.setItemLabelsVisible(true);
//设置每种水果代表的柱的颜色
renderer.setSeriesPaint(0, new Color(0,0,255));
renderer.setSeriesPaint(1, new Color(0,100,255));
renderer.setSeriesPaint(2, Color.GREEN);
plot.setRenderer(renderer);
//设置柱的透明度,数值时float型
plot.setForegroundAlpha(0.6f);
//设置轴名的显示位置
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
//-------------------------------------------------------------------------------
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection ());
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
ChartUtilities.writeImageMap(pw, filename, info,true);
pw.flush();
} catch (Exception e) {
e.printStackTrace(System.out);
filename = "picture_error.png"; }
return filename;
}
public static String generateLineChart(DefaultCategoryDataset dataset,String title,String title1,String title2,int width,int height,HttpSession session, PrintWriter pw){
String filename = null;
try {
if (session != null)
{
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
session.removeAttribute("JFreeChart_Deleter");
session.setAttribute("JFreeChart_Deleter", deleter);
}
JFreeChart chart = ChartFactory.createLineChart(
title, // 折线图的名字
title1, // X轴的名字
title2, // Y轴的名字
dataset, // 数据集
PlotOrientation.VERTICAL,
true,
true,
false
);
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection ());
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
ChartUtilities.writeImageMap(pw, filename, info,true);
pw.flush();
} catch (Exception e) {
e.printStackTrace(System.out);
filename = "picture_error.png"; }
return filename;
}
}
第三步:封装数据集
(servlet层)
1.饼状图封装数据集 DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
defaultpiedataset.setValue("yiyue", 300);
defaultpiedataset.setValue("eryue", 260);
defaultpiedataset.setValue("sanyue", 400);
2.柱状图封装数据集 String [] title = {"苹果","李子","香蕉"};
String [] title1 = {"上海","广州","深圳"};
double [][] shu =new double[][] {{100,200,300},{200,300,400},{300,400,500}};
DefaultCategoryDataset defaultCategoryDatase =(DefaultCategoryDataset) DatasetUtilities.createCategoryDataset(title, title1, shu);
3.折线图封装数据集 DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
// 各曲线名称
String series1 = "冰箱";
String series2 = "彩电";
String series3 = "洗衣机";
// 横轴名称(列名称)
String type1 = "1月";
String type2 = "2月";
String type3 = "3月";
linedataset.addValue(0.0, series1, type1);
linedataset.addValue(4.2, series1, type2);
linedataset.addValue(3.9, series1, type3);
linedataset.addValue(1.0, series2, type1);
linedataset.addValue(5.2, series2, type2);
linedataset.addValue(7.9, series2, type3);
linedataset.addValue(2.0, series3, type1);
linedataset.addValue(9.2, series3, type2);
linedataset.addValue(8.9, series3, type3);
第四步:在JSP页面引用
1.饼状图的引用
<%
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset");
// 用ChartUtil工具类产生图片 (饼图)
String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out));
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;
%>
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>
2.柱状图和折线图的引用
DefaultCategoryDataset defaultCategoryDatase =(DefaultCategoryDataset) request.getAttribute("list");
String p = ChartUtil.generateBarChart(defaultCategoryDatase," 水果销量统计图","水果","销量",500,300,null, new PrintWriter(out));
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;
%>
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>
第五步:在web.xml中添加配置
<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>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
第六步:打开浏览器测试吧
第二步:创建工具类ChartUtil
package com.wnkj.util;
import java.awt.Color;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.entity.StandardEntityCollection
import org.jfree.chart.labels.StandardCategoryItemLabe
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.servlet.ChartDeleter;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
public class ChartUtil {
//
public
String filename = null;
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
}
JFreeChart chart = ChartFactory.createPieChart3D(
title,
dataset, // 数据集
true,
true,
false );
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
} catch (Exception e) {
return filename;
}
public
String filename = null;
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
}
JFreeChart chart = ChartFactory.createBarChart3D(
//-------------------------------------------------------------------------
//显示每个柱的数值
CategoryPlot plot = chart.getCategoryPlot();
BarRenderer3D renderer = new BarRenderer3D();
renderer.setItemLabelGenerator(new StandardCategoryItemLabe
renderer.setItemLabelsVisible(true);
//设置每种水果代表的柱的颜色
renderer.setSeriesPaint(0, new Color(0,0,255));
renderer.setSeriesPaint(1, new Color(0,100,255));
renderer.setSeriesPaint(2, Color.GREEN);
plot.setRenderer(renderer);
//设置柱的透明度,数值时float型
plot.setForegroundAlpha(0.6f);
//设置轴名的显示位置
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
//-------------------------------------------------------------------------------
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
} catch (Exception e) {
return filename;
}
public
}
第三步:封装数据集
1.饼状图封装数据集 DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
2.柱状图封装数据集 String [] title = {"苹果","李子","香蕉"};
3.折线图封装数据集 DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
第四步:在JSP页面引用
1.饼状图的引用
<%
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset");
// 用ChartUtil工具类产生图片 (饼图)
String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out));
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;
%>
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>
2.柱状图和折线图的引用
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;
%>
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>
第五步:在web.xml中添加配置
<servlet>
</servlet>
<servlet-mapping>
</servlet-mapping>
第六步:打开浏览器测试吧
记得将编码格式统一成utf-8