首先需要一个jar包:jfreechart-1.0.9.jar .可以若不是maven项目你可以导包,若是在pom.xml中写入这个
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.9</version>
</dependency>
然后:
jsp:
<BODY>
<img src="<c:out value="${graphURL}" />" width=600 height=350 border=0
usemap="<c:out value="${filename}" />">
</BODY>
controller层为:
/**
* 饼图、柱状图等的显示控制器
*
* @author sunny
*/
@Controller
@RequestMapping("/Chart")
public class ChartController extends ControllerFather {
/*****************************************************
* 饼状图开始
*/
private String CHART_PATH = "E:/jfreechart/";//用于保存图片路径
private String charName="pieChart.png";
@RequestMapping(value = "/pieChart")
public ModelAndView pieChart(Model model, HttpServletRequest request,
HttpServletResponse response) {
//用于显示在饼图中的数据集
String[] keys = { "史亚妮", "李冰", "nini", "李开复", "马云", "其它" };
double[] data = { 42.2, 15, 13.5, 15.8, 8.2, 9.8 };
PieDataset pd = getPieDataSet(keys, data);//获取饼状图 数据集
// 利用工厂类来创建3D饼图
JFreeChart chart =ChartFactory.createPieChart3D("2011学生竞争力排名报告", pd, true, true, false);
// 使下说明标签字体清晰,去锯齿类似于
// chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);的效果
chart.setTextAntiAlias(false);
// 图片背景色
chart.setBackgroundPaint(Color.white);
// 设置图标题的字体重新设置title(否组有些版本Title会出现乱码)
chart.getTitle().setFont((new Font("隶书", Font.CENTER_BASELINE, 20)));
// 设置图例(Legend)上的文字(//底部的字体)
chart.getLegend().setItemFont(new Font("隶书", Font.CENTER_BASELINE, 15));
PiePlot3D plot = (PiePlot3D) chart.getPlot();
// 图片中显示百分比:默认方式
// 指定饼图轮廓线的颜色
plot.setBaseSectionOutlinePaint(Color.BLACK);
plot.setBaseSectionPaint(Color.BLACK);
// 设置无数据时的信息
plot.setNoDataMessage("无对应的数据,请重新查询。");
// 设置无数据时的信息显示颜色
plot.setNoDataMessagePaint(Color.red);
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}({2})"));
plot.setLabelFont(new Font("隶书", Font.TRUETYPE_FONT, 12));
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(0.65f);
// 指定显示的饼图上圆形(false)还椭圆形(true)
plot.setCircular(false, true);
// 设置第一个 饼块section 的开始位置,默认是12点钟方向
plot.setStartAngle(90);
// 设置分饼颜色(不设置它会自己设置)
// plot.setSectionPaint(pieKeys[0], new Color(244, 194, 144));
// plot.setSectionPaint(pieKeys[1], new Color(144, 233, 144));
// 把饼图生成图片
FileOutputStream fos_jpg = null;
try {
CHART_PATH="E:/winskysoft文档/CRM/CRM/src/main/webapp/images/";
System.out.println("所在路径:"+CHART_PATH);
// 文件夹不存在则创建
isChartPathExist(CHART_PATH);
String chartName = CHART_PATH + charName;
fos_jpg = new FileOutputStream(chartName);
// 高宽的设置影响椭圆饼图的形状
ChartUtilities.writeChartAsPNG(fos_jpg, chart, 700, 400);
System.out.println(fos_jpg);
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
fos_jpg.close();//http://1wangxiaobo@163.com
System.out.println("create pie-chart.");
} catch (Exception e) {
e.printStackTrace();
}
}
//传到页面上的路径
String filename = null;
try {
filename = ServletUtilities.saveChartAsPNG(chart, 600, 350, null,
null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String graphURL = request.getContextPath() + "/DisplayChart?filename="
+ filename;
ModelAndView view = new ModelAndView("pieChart.jsp");//这里的jsp地址就是上面那个jsp名字。
view.addObject("filename", filename);
view.addObject("graphURL", graphURL);
return view;
}
// 数值设置
/**
* 饼状图 数据集
*/
public static PieDataset getPieDataSet(String[] keys, double[] data) {
if (keys != null && data != null) {
if (keys.length == data.length) {
DefaultPieDataset dataset = new DefaultPieDataset();
for (int i = 0; i < keys.length; i++) {
dataset.setValue(keys[i], data[i]);
}
return dataset;
}
}
return null;
}
/**
* 判断文件夹是否存在,如果不存在则新建
*
* @param chartPath
*/
private static void isChartPathExist(String chartPath) {
File file = new File(chartPath);
if (!file.exists()) {
file.mkdirs();
}
}
/***************************************
* 饼状图结束
*/
/****************************************************/
/**********甘特图开始8**********************************/
@RequestMapping(value = "/ganttChart")
public ModelAndView chart(Model model, HttpServletRequest request,
HttpServletResponse response) {
//甘特数据集
IntervalCategoryDataset dataset = createSampleDataset();
JFreeChart chart = ChartFactory.createGanttChart("任务管理系统",
"任务各阶段详细实施计划",
"任务周期",
dataset,
false,
false,
false);
CategoryPlot plot=chart.getCategoryPlot();
chart.getTitle().setFont(new Font("新宋体",Font.BOLD,20));
CategoryAxis domainAxis=plot.getDomainAxis();
//水平底部列表
domainAxis.setLabelFont(new Font("新宋体",Font.BOLD,14));
//水平底部标题
domainAxis.setTickLabelFont(new Font("新宋体",Font.BOLD,12));
//垂直标题
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLabelFont(new Font("新宋体",Font.BOLD,16));
//用来控制时间轴的显示,防止乱码
DateAxis da = (DateAxis)plot.getRangeAxis(0);
da.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));
//把甘特图写入电脑中
FileOutputStream fop = null;
try{
System.out.println("Danny>> begin.");
fop = new FileOutputStream("E:/jfreechart/gantt.jpg");
ChartUtilities.writeChartAsJPEG(fop,1f, chart, 800, 600,null);
System.out.println("Danny>> end..");
System.out.println("Danny>> successful...");
} catch (IOException e){
e.printStackTrace();
} finally{
try{
fop.close();
} catch (IOException e){
e.printStackTrace();
}
}
//传路径
String filename = null;
try {
filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null,
null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String graphURL = request.getContextPath() + "/DisplayChart?filename="
+ filename;
ModelAndView view = new ModelAndView("ganttChart.jsp");
view.addObject("filename", filename);
view.addObject("graphURL", graphURL);
return view;
}
/** *//**
* Utility method for creating <code>Date</code> objects.
*
* @param day 日
* @param month 月
* @param year 年
*
* @return a date.
*/
private static Date date(final int day, final int month, final int year){
final Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
final Date result = calendar.getTime();
return result;
}
/**
*
* @return The dataset.
*/
private static IntervalCategoryDataset createSampleDataset() {
final TaskSeries s1 = new TaskSeries("SCHEDULE");
final Task t1 = new Task("任务1", date(1, Calendar.JANUARY, 2001), date(5, Calendar.APRIL, 2001));
t1.setPercentComplete(0.8);
s1.add(t1);
// 创建一个任务并插入两个子任务
final Task t3 = new Task("任务2", date(10, Calendar.APRIL, 2001), date(5, Calendar.MAY, 2001));
final Task st31 = new Task("需求1", date(10, Calendar.APRIL, 2001), date(25, Calendar.APRIL, 2001));
st31.setPercentComplete(0.50);
final Task st32 = new Task("需求2", date(1, Calendar.MAY, 2001), date(5, Calendar.MAY, 2001));
st32.setPercentComplete(1.0);
t3.addSubtask(st31);
t3.addSubtask(st32);
s1.add(t3);
final Task t5 = new Task( "任务3", date(2, Calendar.JUNE, 2001), date(2, Calendar.JUNE, 2001));
s1.add(t5);
final Task t6 = new Task("任务4", date(3, Calendar.MARCH, 2001), date(31, Calendar.JULY, 2001));
t6.setPercentComplete(0.60);
s1.add(t6);
final Task t8 = new Task("任务结束", date(10, Calendar.AUGUST, 2001), date(10, Calendar.AUGUST, 2001));
t8.setPercentComplete(0.0);
s1.add(t8);
final Task t9 = new Task("任务试用", date(12, Calendar.AUGUST, 2001), date(12, Calendar.SEPTEMBER, 2001));
t9.setPercentComplete(0.0);
s1.add(t9);
final Task t10 = new Task("任务测试", date(13, Calendar.SEPTEMBER, 2001), date(31, Calendar.OCTOBER, 2001));
t10.setPercentComplete(0.2);
s1.add(t10);
final Task t12 = new Task("全部结束", date(28, Calendar.NOVEMBER, 2001), date(30, Calendar.NOVEMBER, 2001));
t12.setPercentComplete(0.0);
s1.add(t12);
final TaskSeriesCollection collection = new TaskSeriesCollection();
collection.add(s1);
return collection;
}
/****************************甘特图结束****************************/
}
这里有饼图和甘特图
柱状图类似,就不一一列举啦