嗯 先提供几个关于jfreechart的api和开发者手册的文档
官网jfreechart的api http://www.jfree.org/jfreechart/api/javadoc/index.html 网页版的
jfreechart的chm版的api http://download.csdn.net/detail/undergrowth/6217365
jreechart的开发者手册1.0.13版的 http://download.csdn.net/detail/undergrowth/6217387
还有一个 包含jfreechart的文档,jcommon等等之类的
http://sourceforge.net/projects/jfreechart/files/
先来看看swt版的饼图、柱状图、时间序列图
其实使用jfreechart来进行绘图,无论是什么图,都有三个步骤:
1.显示什么(即数据源)
2.谁来显示(即谁来负责将数据转换为图片)
3.在哪里显示(即是在jsp/servlet/swt/applet中的哪里显示)
先来看看饼图,因为所有的操作在代码里面都加了详细的注释,所以这里就不解释了,看源代码和效果图即可
package com.undergrowth;
import java.awt.Color;
import java.awt.Font;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
public class JFreeChartSwtPie {
/**
* @param args
* 1.显示什么----数据集
* 2.谁来显示----JFreeChart/ChartFactory
* 3.在哪里显示---ChartFrame/Servlet
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.显示什么
//以键值对的方式进行存储数据
DefaultPieDataset dataset=new DefaultPieDataset();
dataset.setValue("初级程序员", 600);
dataset.setValue("中级程序员", 200);
dataset.setValue("高级程序员", 100);
dataset.setValue("其他", 100);
//2.谁来显示
JFreeChart chart=ChartFactory.createPieChart("IT从业人员", dataset, true, true, false);
//因为中文显示的问题 自定义Font 解决中文乱码问题
//JFreeChart负责将Title对象,Legend对象,Plot对象,Dataset对象组合起来绘制图表
Font fontTitleFont=new Font("隶书", Font.BOLD, 20);
Font fontLegendFont=new Font("隶书", Font.BOLD, 10);
Font fontLabelFont=new Font("隶书", Font.BOLD, 14);
//修改图表标题Title的字体
TextTitle title=chart.getTitle();
title.setFont(fontTitleFont);
//修改图表图例Legend的字体
LegendTitle legendTitle=chart.getLegend();
legendTitle.setItemFont(fontLegendFont);
//修改图表绘制Plot字体
PiePlot piePlot=(PiePlot) chart.getPlot();
piePlot.setLabelFont(fontLabelFont);
//修改显示区域其他的填充颜色 默认为黄色 现在修改为灰色
piePlot.setSectionPaint("其他",Color.gray);
//修改区域其他轮廓的颜色为白色
piePlot.setSectionOutlinePaint("其他", Color.white);
//关闭区域轮廓
//piePlot.setSectionOutlinesVisible(false);
//当数据集中有0值或者null时,忽略 负值的话默认是忽略的
piePlot.setIgnoreNullValues(true);
piePlot.setIgnoreZeroValues(true);
//用于修改区域标签的显示格式 key=value(百分数)
PieSectionLabelGenerator generator=new StandardPieSectionLabelGenerator("{0}={1}({2})",NumberFormat.getInstance(),NumberFormat.getPercentInstance());
piePlot.setLabelGenerator(generator);
//修改图例区域的显示效果格式 key(人)
PieSectionLabelGenerator generator2=new StandardPieSectionLabelGenerator("{0}(人)");
piePlot.setLegendLabelGenerator(generator2);
//设置某一块(其他)区域分离出来的效果 后面的0.3数字表示其他区域偏离半径长度的百分比
piePlot.setExplodePercent("其他", 0.3);
//3.在哪显示
//使用ChartFrame 继承JFrame
ChartFrame frame=new ChartFrame("IT", chart);
frame.pack();//调整大小到合适位置
frame.setVisible(true);
}
}
效果图:
柱状图:
package com.undergrowth;
import java.awt.Color;
import java.awt.Font;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RefineryUtilities;
public class JFreeChartSwtBar{
/**
* @param args
* 1.显示什么
* 2.谁来显示
* 3.在哪显示
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.显示什么
//DefaultCategoryDataset显示表格数据 以列进行分组 以行进行着色
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
//第一行
dataset.setValue(144, "Google", "总收入");
dataset.setValue(70, "Google", "盈利");
dataset.setValue(2467, "Google", "市值");
//第二行
dataset.setValue(100, "baidu", "总收入");
dataset.setValue(50, "baidu", "盈利");
dataset.setValue(517, "baidu", "市值");
//第三行
dataset.setValue(110, "tecent", "总收入");
dataset.setValue(60, "tecent", "盈利");
dataset.setValue(650, "tecent", "市值");
//第四行
dataset.setValue(130, "阿里巴巴", "总收入");
dataset.setValue(80, "阿里巴巴", "盈利");
dataset.setValue(1000, "阿里巴巴", "市值");
//2.谁来显示
JFreeChart chart=ChartFactory.createBarChart("各大公司收入/市值比较", "各大公司", "单位(亿/美元)", dataset, PlotOrientation.VERTICAL, true, true, false);
//设置图表背景为白色
chart.setBackgroundPaint(Color.white);
//因为中文显示的问题 自定义Font 解决中文乱码问题
//JFreeChart负责将Title对象,Legend对象,Plot对象,Dataset对象组合起来绘制图表
Font fontTitleFont=new Font("隶书", Font.BOLD, 20);
Font fontLegendFont=new Font("隶书", Font.BOLD, 10);
Font fontLabelFont=new Font("隶书", Font.BOLD, 14);
//修改图表标题Title的字体
TextTitle title=chart.getTitle();
title.setFont(fontTitleFont);
//修改图表图例Legend的字体
LegendTitle legendTitle=chart.getLegend();
legendTitle.setItemFont(fontLegendFont);
//修改图表绘制Plot字体
//CategoryPlot用于管理坐标轴(CategoryAxis,ValueAxis),数据集(Dataset),渲染器(BarRender),
CategoryPlot plot=chart.getCategoryPlot();
//设置plot的背景为灰色 网格线为白色
plot.setBackgroundPaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.white);
//修改同一组间每一项的间距为0
BarRenderer renderer=(BarRenderer) plot.getRenderer();
//renderer.setItemMargin(0);
//设置每一项上显示数字
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
//水平方向
CategoryAxis categoryAxis=plot.getDomainAxis();
categoryAxis.setLabelFont(fontLabelFont);
categoryAxis.setTickLabelFont(fontLabelFont); //设置每一个标记的字体(即每一列的列名)
//垂直方向
ValueAxis valueAxis=plot.getRangeAxis();
valueAxis.setLabelFont(fontLabelFont);
//3.在哪显示
ChartFrame frame=new ChartFrame("各大公司收入/市值比较", chart);
frame.pack(); //自动调整大小到合适
RefineryUtilities.centerFrameOnScreen(frame); //设置位于屏幕中央
frame.setVisible(true);
}
}
效果图:
时间序列图:
package com.undergrowth;
import java.awt.Font;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.DateTickUnitType;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RefineryUtilities;
public class JFreeChartSwtTimeSerisl {
/**
* @param args
*1.显示什么
*2.谁来显示
*3.在哪显示
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
//1.显示什么
TimeSeries s1=new TimeSeries("销售额", Month.class);
s1.add(new Month(1,2013), 200);
s1.add(new Month(2,2013), 200);
s1.add(new Month(3,2013), 300);
s1.add(new Month(4,2013),400);
s1.add(new Month(5,2013), 200);
s1.add(new Month(6,2013), 500);
TimeSeries s2=new TimeSeries("盈利额",Month.class);
s2.add(new Month(1,2013), 100);
s2.add(new Month(2,2013), 80);
s2.add(new Month(3,2013), 150);
s2.add(new Month(4,2013),200);
s2.add(new Month(5,2013), 600);
s2.add(new Month(6,2013), 300);
TimeSeriesCollection dataset=new TimeSeriesCollection();
dataset.addSeries(s1);
dataset.addSeries(s2);
//2.谁来显示
JFreeChart chart=ChartFactory.createTimeSeriesChart("乐麦德销售情况", "月份", "单位:(万元)", dataset, true, true, false);
//因为中文显示的问题 自定义Font 解决中文乱码问题
//JFreeChart负责将Title对象,Legend对象,Plot对象,Dataset对象组合起来绘制图表
Font fontTitleFont=new Font("隶书", Font.BOLD, 20);
Font fontLegendFont=new Font("隶书", Font.BOLD, 10);
Font fontLabelFont=new Font("隶书", Font.BOLD, 14);
//修改图表标题Title的字体
TextTitle title=chart.getTitle();
title.setFont(fontTitleFont);
//修改图表图例Legend的字体
LegendTitle legendTitle=chart.getLegend();
legendTitle.setItemFont(fontLegendFont);
//修改图标的绘制Plot
XYPlot plot=chart.getXYPlot();
//修改水平
DateAxis domainAxis=(DateAxis) plot.getDomainAxis();
domainAxis.setLabelFont(fontLabelFont);
domainAxis.setTickLabelFont(fontLabelFont);
//修改显示的日期格式
domainAxis.setDateFormatOverride(new SimpleDateFormat("MM月"));
domainAxis.setTickUnit(new DateTickUnit(DateTickUnitType.MONTH, 1));
//在每一个点上显示数据
XYItemRenderer renderer=plot.getRenderer();
renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
//设置水平轴的显示日期范围
domainAxis.setRange(new SimpleDateFormat("yyyy-MM-dd").parse("2012-12-16"), new SimpleDateFormat("yyyy-MM-dd").parse("2013-6-31"));
//修改垂直的
ValueAxis rangeAxis=plot.getRangeAxis();
rangeAxis.setLabelFont(fontLabelFont);
rangeAxis.setRange(0, 650);
//3.显示在哪
ChartFrame frame=new ChartFrame("乐麦德2013年上半年销售情况", chart);
frame.pack();
RefineryUtilities.centerFrameOnScreen(frame);
frame.setVisible(true);
}
}
效果图:
上面即是在swt上显示图片,其实在jsp页面上,没有太大的区别,只是三步中的最后一步换了而已,jsp页面的代码就没有加注释了,因为和上面的代码是差不多的,只是最后一步换掉而已.
对于在jsp页面显示图片,需在在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>/DisplayChart</url-pattern>
</servlet-mapping> 添加它的目的是利用DisplayChart(继承HttpServlet)这个类来显示在临时目录中生成的图片,当然你也可以自己写一个servlet,来向输出流中输出你产生的图片,效果是一样的,不过就要用到ChartUtilities.writeChartAsPNG方法了
public static void writeChartAsPNG(java.io.OutputStream out,
JFreeChart chart,
int width,
int height)
throws java.io.IOExceptionWrites a chart to an output stream in PNG format我采用的是在web.xml中进行配置,输出而已
jsp页面:
饼图:
<%@page import="java.text.NumberFormat"%>
<%@page import="org.jfree.chart.labels.StandardPieSectionLabelGenerator"%>
<%@page import="org.jfree.chart.plot.PiePlot"%>
<%@page import="java.awt.Font"%>
<%@page import="org.jfree.data.general.DefaultPieDataset"%>
<%@page import="org.jfree.chart.ChartFactory"%>
<%@page import="org.jfree.chart.JFreeChart"%>
<%@page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Font font=new Font("隶书",Font.BOLD,20);
DefaultPieDataset dataset=new DefaultPieDataset();
dataset.setValue("美工", 200);
dataset.setValue("中级程序员", 700);
dataset.setValue("高级程序员", 700);
dataset.setValue("其他", 1000);
JFreeChart chart=ChartFactory.createPieChart("IT行业职业分布图", dataset, true,false,false);
PiePlot plot=(PiePlot)chart.getPlot();
plot.setNoDataMessage("没有数据显示");
StandardPieSectionLabelGenerator generator=new StandardPieSectionLabelGenerator("{0}:({1},{2})",NumberFormat.getNumberInstance(),NumberFormat.getPercentInstance());
plot.setLabelFont(font);
plot.setExplodePercent("其他", 0.1);
plot.setLabelGenerator(generator);
chart.getTitle().setFont(font);
chart.getLegend().setItemFont(font);
String filename=ServletUtilities.saveChartAsPNG(chart, 500, 300,null, session);
String graphurl=request.getContextPath()+"/DisplayChart?filename="+filename;
%>
<center>
<img src="<%=graphurl%>">
</center>
</body>
</html>
输入:http://localhost:8080/JFreeChart/pie.jsp
效果图:
柱状图:
<%@page import="org.jfree.ui.TextAnchor"%>
<%@page import="org.jfree.chart.labels.ItemLabelAnchor"%>
<%@page import="org.jfree.chart.labels.ItemLabelPosition"%>
<%@page import="org.jfree.chart.labels.StandardCategoryItemLabelGenerator"%>
<%@page import="org.jfree.chart.renderer.category.BarRenderer3D"%>
<%@page import="org.jfree.chart.axis.AxisLocation"%>
<%@page import="org.jfree.data.general.DatasetUtilities"%>
<%@page import="org.jfree.data.category.CategoryDataset"%>
<%@page import="org.jfree.chart.axis.ValueAxis"%>
<%@page import="org.jfree.chart.axis.CategoryAxis"%>
<%@page import="org.jfree.chart.plot.CategoryPlot"%>
<%@page import="java.awt.Color"%>
<%@page import="java.awt.Font"%>
<%@page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@page import="org.jfree.chart.plot.PlotOrientation"%>
<%@page import="org.jfree.chart.ChartFactory"%>
<%@page import="org.jfree.chart.JFreeChart"%>
<%@page import="org.jfree.data.category.DefaultCategoryDataset"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%
Font font=new Font("隶书",Font.BOLD,20);
String rows[]={"猪肉","牛肉","鸡肉"};
String cols[]={"广州","株洲","上海"};
double data[][]={{1000,1000,1000},{800,800,800},{600,600,600}};
CategoryDataset dataset=DatasetUtilities.createCategoryDataset(rows, cols, data);
JFreeChart chart=ChartFactory.createBarChart3D("肉类销售柱状图", "肉类", "销售", dataset, PlotOrientation.VERTICAL, true, true, false);
chart.getTitle().setFont(font); //设置标题的字体
chart.setBackgroundPaint(Color.white); //绘制背景为白色
CategoryPlot cpPlot=chart.getCategoryPlot();
/* cpPlot.setDomainGridlinePaint(Color.black);
cpPlot.setDomainGridlinesVisible(true);
cpPlot.setRangeGridlinePaint(Color.red); */
cpPlot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
cpPlot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
BarRenderer3D renderer=new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));
cpPlot.setRenderer(renderer);
chart.getLegend().setItemFont(font);
CategoryAxis ca=cpPlot.getDomainAxis();
ca.setLabelFont(font);
ca.setTickLabelFont(font);
ValueAxis va=cpPlot.getRangeAxis();
va.setLabelFont(font);
String filename=ServletUtilities.saveChartAsPNG(chart, 500, 300,null, session);
String graphurl=request.getContextPath()+"/DisplayChart?filename="+filename;
%>
<center>
<img src="<%=graphurl%>">
</center>
</body>
</html>输入:http://localhost:8080/JFreeChart/barchart4.jsp
效果图:
时间序列图:
<%@page import="org.jfree.chart.axis.DateTickUnitType"%>
<%@page import="org.jfree.chart.axis.DateTickUnit"%>
<%@page import="java.text.SimpleDateFormat,java.util.Date"%>
<%@page import="org.jfree.chart.axis.DateAxis"%>
<%@page import="org.jfree.chart.renderer.xy.XYLineAndShapeRenderer"%>
<%@page import="org.jfree.ui.TextAnchor"%>
<%@page import="org.jfree.chart.labels.ItemLabelAnchor"%>
<%@page import="org.jfree.chart.labels.ItemLabelPosition"%>
<%@page import="org.jfree.chart.labels.StandardXYItemLabelGenerator"%>
<%@page import="org.jfree.chart.renderer.xy.XYItemRenderer"%>
<%@page import="org.jfree.chart.axis.ValueAxis"%>
<%@page import="org.jfree.chart.plot.XYPlot"%>
<%@page import="java.awt.Font"%>
<%@page import="org.jfree.chart.ChartFactory"%>
<%@page import="org.jfree.chart.JFreeChart"%>
<%@page import="org.jfree.data.time.TimeSeriesCollection"%>
<%@page import="org.jfree.data.time.Month"%>
<%@page import="org.jfree.data.time.TimeSeries"%>
<%@page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Font font=new Font("隶书",Font.BOLD,18);
TimeSeries series=new TimeSeries("某网站的访问统计",Month.class);
series.add(new Month(1,2013), 600);
series.add(new Month(2,2013), 1100);
series.add(new Month(3,2013), 800);
series.add(new Month(4,2013), 900);
series.add(new Month(5,2013), 400);
series.add(new Month(6,2013), 700);
TimeSeriesCollection collection=new TimeSeriesCollection();
collection.addSeries(series);
JFreeChart chart=ChartFactory.createTimeSeriesChart("网站统计", "月份", "访问量", collection, true, true, true);
chart.getTitle().setFont(font);
chart.getLegend().setItemFont(font);
XYPlot plot=chart.getXYPlot();
DateAxis dateAxis=(DateAxis)plot.getDomainAxis();
dateAxis.setDateFormatOverride(new SimpleDateFormat("M月"));
dateAxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH,1));
dateAxis.setRange(new SimpleDateFormat("yyyy-MM-dd").parse("2012-12-16"), new SimpleDateFormat("yyyy-MM-dd").parse("2013-6-31"));
ValueAxis valueAxis=plot.getDomainAxis();
valueAxis.setLabelFont(font);
valueAxis.setTickLabelFont(font);
XYLineAndShapeRenderer linerRenderer=(XYLineAndShapeRenderer)plot.getRenderer();
linerRenderer.setBaseShapesVisible(true);
XYItemRenderer renderer=plot.getRenderer();
renderer.setBaseItemLabelsVisible(true);
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_CENTER));
renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
renderer.setBaseItemLabelFont(new Font("Dialog",1,12));
plot.setRenderer(renderer);
ValueAxis valueAxis2=plot.getRangeAxis();
valueAxis2.setLabelFont(font);
String filename=ServletUtilities.saveChartAsPNG(chart, 600, 600,null, session);
String graphurl=request.getContextPath()+"/DisplayChart?filename="+filename;
%>
<center>
<img src="<%=graphurl%>">
</center>
</body>
</html>输入:http://localhost:8080/JFreeChart/broken.jsp
效果图:
顺便加一个在jsp页面请求一个自定义的servlet显示图片(实质是想自定义的servlet的输出流中写入图片)
getImage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String graphurl=request.getContextPath()+"/ServletTest";
out.println(graphurl);
%>
<img alt="jfreechart" src=<%=graphurl%>>
</body>
</html>
自定义的Servlet为ServletTest 代码如下:
package com.undergrowth;
import java.awt.Font;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
/**
* Servlet implementation class ServletTest
*/
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletTest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
OutputStream outStr=response.getOutputStream();
response.setContentType("image/png");
//1.显示什么
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
dataset.addValue(200, "系统分析师", "软件");
dataset.addValue(100, "系统分析师", "硬件");
//2.谁来显示
Font fontLegend=new Font("隶书", Font.BOLD, 20);
Font fontTitle=new Font("隶书", Font.BOLD, 30);
Font font=new Font("隶书", Font.BOLD, 10);
JFreeChart chart=ChartFactory.createBarChart3D("嵌入式开发人员统计", "分类", "人数", dataset, PlotOrientation.VERTICAL, true, true, false);
chart.getLegend().setItemFont(fontLegend);
chart.getTitle().setFont(fontTitle);
chart.getCategoryPlot().getDomainAxis().setLabelFont(font);
chart.getCategoryPlot().getDomainAxis().setTickLabelFont(font);
chart.getCategoryPlot().getRangeAxis().setLabelFont(font);
//3.在哪显示
ChartUtilities.writeChartAsPNG(outStr, chart, 300, 300);
//System.out.println("柱状图");
outStr.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
测试: http://localhost:8080/ServletTest/getImage.jsp
附:本文的源代码
http://download.csdn.net/detail/undergrowth/6217609