最近用到了JFreeChart,现将实例代码贴出来,大家可以参考一下,代码中如有错误或可以改进的地方,还请大家指正。
通过下面的代码,可以很清晰地看出JFreeChart的结构,核心即为chart, plot, XXXAxis, renderer,了解了它们的常用方法后,
会发现其实JFreeChart使用起来是很简单方便的。废话不多说了,还是直接看示例吧。
1.柱状图
1/** *//**
2 * 生成图像文件
3 *
4 * @param session
5 * httpsession
6 * @param w
7 * 生成的图的宽度
8 * @param h
9 * 生成的图的高度
10 * @return
11 * 生成的图像文件的路径
12 */
13 public String createBarChart(HttpSession session,
14 String title, // 图片标题
15 int w, // 图片宽度
16 int h, // 图片高度
17 CategoryDataset dataset //用于出图的数据集
18 ) {
19
20 //通过ChartFactory的静态方法获取JFreeChart对象
21 JFreeChart chart = ChartFactory.createBarChart(title, //图片标题
22 null, //横坐标标题
23 null, //纵坐标标题
24 dataset, //用于出图的数据集
25 PlotOrientation.VERTICAL, //柱子方向
26 true, //是否包含Legend
27 false, //是否包含tooltips
28 false); //是否包含urls
29 chart.setBackgroundPaint(Color.WHITE);
30
31 // 设置标题字体
32 chart.getTitle().setFont(new Font("宋体", Font.CENTER_BASELINE, 12));
33
34 CategoryPlot plot = chart.getCategoryPlot();
35
36 /**//*//没有数据时显示的消息
37 plot.setNoDataMessage("数据还未录入!");
38 plot.setNoDataMessageFont(new Font("宋体", Font.CENTER_BASELINE, 15));*/
39
40 //横坐标设置
41 CategoryAxis domainAxis = plot.getDomainAxis();
42 //设置横坐标上显示各个业务子项的字体
43 domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 9));
44 plot.setDomainAxis(domainAxis);
45
46 //纵坐标设置
47 ValueAxis rangeAxis = (ValueAxis)plot.getRangeAxis();
48 // 设置最高的一个 Item 与图片顶端的距离
49 rangeAxis.setUpperMargin(0.15);
50 // 设置最低的一个 Item 与图片底端的距离
51 rangeAxis.setLowerMargin(0.15);
52 plot.setRangeAxis(rangeAxis);
53
54 BarRenderer renderer = new BarRenderer();
55 renderer.setBaseOutlinePaint(Color.BLACK);
56 /**//*// 设置图上的文字
57 renderer.setSeriesItemLabelFont(0, font);
58 renderer.setSeriesItemLabelFont(1, font);*/
59 // 设置legend的字体
60 renderer.setBaseLegendTextFont(new Font("宋体", Font.LAYOUT_RIGHT_TO_LEFT, 10));
61 // 设置 Wall 的颜色
62 //renderer.setWallPaint(Color.gray);
63 // 设置每种柱的颜色
64 renderer.setSeriesPaint(0, new Color(133,210,38));
65 renderer.setSeriesPaint(1, new Color(0,131,249));
66 //设置柱的 Outline 颜色
67 renderer.setSeriesOutlinePaint(0, Color.BLACK);
68 renderer.setSeriesOutlinePaint(1, Color.BLACK);
69 // 设置每个平行柱的之间距离
70 renderer.setItemMargin(0.03);
71
72 // 显示每个柱的数值,并修改该数值的字体属性
73 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
74 //注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
75 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
76 ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
77 // 设置柱形图上的文字偏离值
78 renderer.setItemLabelAnchorOffset(10D);
79 renderer.setBaseItemLabelsVisible(true);
80 renderer.setBaseItemLabelFont(new Font("Times New Roman", Font.PLAIN, 9));
81
82 plot.setRenderer(renderer);
83
84 // 设置柱的透明度
85 plot.setForegroundAlpha(0.6f);
86 // 设置横坐标和纵坐标的显示位置
87 plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
88 plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
89
90 // 获取图片路径
91 // 图片存于临时文件夹下
92 String filename = null;
93 try {
94 filename = ServletUtilities.saveChartAsPNG(chart, w, h, null,
95 session);
96 } catch (IOException e) {
97 System.out.println("Exception - " + e.toString());
98 e.printStackTrace(System.out);
99 filename = "public_error_500x300.png";
100 }
101 return filename;
102 }
2.曲线图
1 /** *//**
2 * 生成图像文件
3 *
4 * @param session
5 * httpsession
6 * @param data1
7 * IntervalXYDataset
8 * @param w
9 * 生成的图的宽度
10 * @param h
11 * 生成的图的高度
12 * @return
13 * 生成的图像文件的路径
14 */
15 public String createStepLineChart(
16 HttpSession session,
17 String title, // 图片标题
18 IntervalXYDataset data1,//数据集
19 int w, // 图片宽度
20 int h // 图片高度
21 ) {
22
23 /**//*
24 * 任何类型的图表的最终表现形式都是在JFreeChart对象进行一些属性的定制。
25 * JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象
26 */
27 JFreeChart chart = ChartFactory.createXYStepChart(title, // chart title
28 null,
29 null,
30 data1, // data
31 PlotOrientation.VERTICAL,
32 true, // include legend
33 false,
34 false);
35
36 // 设置背景颜色为白色
37 chart.setBackgroundPaint(Color.white);
38
39 // 设置标题字体
40 chart.getTitle().setFont(new Font("宋体", Font.CENTER_BASELINE, 12));
41 XYPlot plot = chart.getXYPlot();
42
43 plot.setBackgroundPaint(Color.lightGray);
44 plot.setDomainGridlinePaint(Color.white);
45 plot.setRangeGridlinePaint(Color.white);
46
47 DateAxis domainAxis = new DateAxis();
48 domainAxis.setDateFormatOverride(new SimpleDateFormat("MM-dd"));
49 domainAxis.setTickMarkPosition(DateTickMarkPosition.START);
50 domainAxis.setLowerMargin(0);
51 domainAxis.setUpperMargin(0);
52 plot.setDomainAxis(domainAxis);
53
54 NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
55 // 设置最高的一个 Item 与图片顶端的距离
56 rangeAxis.setUpperMargin(0.15);
57 // 设置最低的一个 Item 与图片底端的距离
58 rangeAxis.setLowerMargin(0.15);
59 plot.setRangeAxis(rangeAxis);
60
61 /**//*
62 * XXXRender:负责如何显示一个图表对象
63 */
64 XYStepRenderer renderer = (XYStepRenderer)plot.getRenderer();
65 /**//*
66 * 设置线条的颜色
67 */
68 renderer.setSeriesPaint(0, new Color(0,150,240));
69 renderer.setSeriesPaint(1, new Color(244,109,19));
70
71 // 设置图上的文字字体
72 Font font = new Font("宋体", Font.LAYOUT_RIGHT_TO_LEFT, 10);
73 renderer.setSeriesItemLabelFont(0, font);
74 renderer.setSeriesItemLabelFont(1, font);
75 // 设置legend的字体
76 renderer.setBaseLegendTextFont(font);
77 renderer.setBaseItemLabelFont(font);
78
79 plot.setRenderer(renderer);
80
81 String filename = null;
82 try {
83 filename = ServletUtilities.saveChartAsPNG(chart, w, h, null,
84 session);
85 } catch (Exception e) {
86 System.out.println("Exception - " + e.toString());
87 e.printStackTrace(System.out);
88 filename = "public_error_500x300.png";
89 }
90 return filename;
91 }
另外,因为JFreeChart将生成的图片置于临时文件夹下,为防垃圾文件泛滥,可以写一个监听类,当session失效时删除临时图片文件
1public class DelTempListener implements HttpSessionListener {
2
3 public void sessionCreated(HttpSessionEvent se) {
4 System.out.println("srart____________");
5 delete(se);
6 System.out.println("srart___over");
7 }
8
9 public void sessionDestroyed(HttpSessionEvent se) {
10 System.out.println("Destroyed____________");
11 delete(se);
12 System.out.println("Destroyed__over");
13 }
14 private void delete(HttpSessionEvent se){
15 ChartDeleter deleter = (ChartDeleter)se.getSession().getAttribute("JFreeChart_Deleter");
16 se.getSession().removeAttribute("JFreeChart_Deleter");
17 se.getSession().setAttribute("JFreeChart_Deleter", deleter);
18 }
19}
posted on 2010-07-25 22:44
donghang73 阅读(4468)
评论(1) 编辑 收藏 所属分类:
学习笔记