收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


struts2的笔记
状态: 离线
人气:571164
访问用户量:845
笔记经验:470
总积分:567
级别:普通会员
搜索本笔记
ta的交流分类
ta的交流主题贴(5)
ta的所有交流贴(5)
ta的全部笔记
全部笔记(89)
未分类笔记(3)
研磨struts2(86)
存档
2012-04(85)
2012-03(4)

2012-04-23 09:40:38
《研磨struts2》第十八章 结合JFreeChart 之 18.1 JFreeChart使用
浏览(5046)|评论(0)   交流分类:Java|笔记分类: 研磨struts2

18.1 JFreeChart使用

18.1.1概述

对于一个企业级的应用而言,经常会用到一些直观的图形化报表,用于帮助用户进行商业决策或者逻辑分析等,比如:

  • 用一个饼图来显示公司员工的学历比例,比如本科生占50%,研究生占30%,博士占20%。
  • 也可以用一个折线图来显示销售人员近几年的业绩,比如,小王2007年销售额15万,2008年20万,2009年20万;而小张2007年销售额10万,2008年50万,2009年100万。

诸如此类,还有很多…

图形化的报表总是比枯燥的数字让人来的有兴趣,而且图形化报表在企业级应用中通常都是必不可少的,那么该怎么实现呢?

JFreeChart就是一个能帮助我们实现图形化报表的开源框架。JFreeChart封装了各种各样的图形化的报表模型,使得我们不用去关心如何画图形报表,而是直接把数据对象交给JFreeChart,由它来帮我们生成图形化的报表,从而使得开发图形化的报表变得非常简单。

请注意:在本节并不把Struts2和JFreeChart结合起来,而是先学习和JFreeChart的基础知识。

18.1.2 JFreeChart下载

到JFreeChart的官网http://www.jfree.org/jfreechart/download.html下载相关的资源,找到JFreeChart的资源包jfreechart-1.0.13.zip,并下载。

       解压下载的文件,可以得到如下的目录结构:

图18.1 JFreeChart目录结构

在这里无需全面展开学习JFreeChart,所以只需要看两个文件夹:

  • lib:这里面放了JFreeChart的jar包,和所有JFreeChart依赖的jar包。
  • tests:这里存放了官方以junit的方式来实现的单元测试的用例,其实,可以把它当做官方示例来看待。

其他文件夹的内容这里暂时用不到,就不去管了。

18.1.3使用JFreeChart画出饼图

要使用JFreeChart来画饼图,首先需要把lib中JFreeChart依赖的jar包添加到web工程中。

方式是:从上一节中解压的文件夹中找到lib下的jfreechart-1.0.13.jar和jcommon-1.0.16.jar,拷贝到web工程的WebContent/WEB-INF/lib包下面,这样就可以在工程中引用JFreeChart了。

       接下来,先在非web环境下做一个示例来使用JFreeChart画出饼图,也就是在纯Java的环境下使用JFreeChart来画饼图。示例代码如下:

 

java代码:
/**
 * 图表实际上分以下部分
 * 1、图表标题部分
 * 2、实际统计图部分
 * 3、图表图例部分
 * 着重强调,所有涉及到汉字的部分,必须重新设置字体,否则显示乱码
 *  plot.setLabelFont(new Font("simsun",Font.ITALIC,14));
 * 否则item的标题会出现中文乱码问题
 */
public class MyPie extends ApplicationFrame{
	private static final Font font = new Font("simsun",Font.ITALIC,22);
	public MyPie(String title) {
		super(title);
		setContentPane(new ChartPanel(getChart()));
	}
	/**
	 * 图表需要的数据
	 * 对于饼图来说,建立的数据就像Map一样
	 * @return 封装好的画pie图的数据集对象
	 */
	private static DefaultPieDataset getDataset(){
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("本科生", 50);
		dataset.setValue("研究生", 30);
		dataset.setValue("博士", 20);
		return dataset;
	}
	/**
	 * 控制图表的各个显示细节,准备chart对象,要注意的就是设置各个部分的Font
	 * 而返回的JFreeChart对象就是各种各样的统计图表,现在返回的是饼图
	 * @return 准备好了的JFreeChart对象
	 */
	public JFreeChart getChart(){
		final DefaultPieDataset dataset = getDataset();
		JFreeChart chart = ChartFactory.createPieChart("XX公司员工学历比例图",
				dataset,
				true,//是否有标题
				false,//是否有悬浮提示
				false//是否有连接
			);
		
		chart.setTitle(new TextTitle("XX公司员工学历比例图",font));
		
		//重新设置图例的字体,保证汉字的显示
		LegendTitle legend = chart.getLegend();
		legend.setItemFont(font);
		
		//重新设置统计表对象的字体,保证汉字的显示
		PiePlot plot = (PiePlot) chart.getPlot();
		plot.setBackgroundAlpha(0.9f);
		plot.setLabelFont(font);
		
		return chart;		
	}		
	public static void main(String[] args) {
		//最终测试一下
		MyPie demo = new MyPie("XX公司员工学历比例图");
		demo.pack();
		RefineryUtilities.centerFrameOnScreen(demo);
		demo.setVisible(true);
	}
}

来看看上述代码的实现细节:

  • getDataset方法为这次显示准备数据,而饼图需要的数据需要配套的DefaultPieDataset对象来容纳,它容纳数据的时候,就像一个Map,上例中给出了某个学历对应有多少人。
  • getChart方法返回一个JFreeChart的图表对象,在这个方法里我们只需要管理图表对象的各部分内容即可。这个最简单的饼图对象,只需要管理它的标题(TextTitle)、图例(LegendTitle)、图表(PiePlot)三部分就可以了。大多数参数使用默认的配置就行,需要着重强调的是,JFreeChart对中文的支持并不好,涉及到中文的地方需要重新设置字体才能正常显示。所以会有以下的设置:

l         chart.setTitle(new TextTitle("XX公司员工学历比例图",font));重新设置标题的字体,其中,引用的font对象为这个类的private static final属性。

l         legend.setItemFont(font);重新设置图例的字体,引用的font对象同上。

l         plot.setLabelFont(font);重新设置图表的字体,引用的font对象同上。

除了上面这两个部分外,剩下的部分就是测试JFreeChart图表的方法了,基本的方式如下:

  • 测试类要继承ApplicationFrame,这是JFreeChart中为我们写好的一个类,如果使用它就可以用一个单独的JFrame来显示图表。
  • 构造方法中setContentPane(new ChartPanel(getChart()));将生成的图表对象放到这个JFrame的ContentPane上。

现在可以运行测试了,直接运行这个类的main方法,在Eclipse中可以在代码窗口上右击选择【Run as】->【Java Application】。可以看到弹出一个窗口,上面显示着按照测试数据生成的饼图图表,如下图所示:

图18.2 使用JFreeChart画出的饼图

18.1.4使用JFreeChart画出柱状图

       再来看看如何使用JFreeChart来画柱状图,基本的实现方式和画饼图是类似的,下面就来把上面实现的饼图变成柱状图。示例代码如下:

 

java代码:
public class MyBar extends ApplicationFrame{
	private static final Font font = new Font("simsun",Font.ITALIC,22);
	public MyBar(String title) {
		super(title);
		setContentPane(new ChartPanel(getChart()));
	}
	/**
	 * 图表需要的数据
	 * 对于柱状图来说,建立的数据就像Map一样
	 * @return 封装好的画柱状图的数据集对象
	 */
	private static DefaultCategoryDataset getDataset(){
		DefaultCategoryDataset  dataset = new DefaultCategoryDataset();
		dataset.setValue(50,"本科生","本科生");
		dataset.setValue(30,"研究生","研究生");
		dataset.setValue(20,"博士","博士");
		return dataset;
	}
	/**
	 * 控制图表的各个显示细节,准备chart对象,要注意的就是设置各个部分的Font
	 * 而返回的JFreeChart对象就是各种各样的统计图表,现在返回的是柱状图
	 * @return 准备好了的JFreeChart对象
	 */
	public JFreeChart getChart(){
		final DefaultCategoryDataset dataset = getDataset();
		JFreeChart chart = ChartFactory.createBarChart3D("XX公司员工学历比例图","学历","人数",
				dataset,PlotOrientation.VERTICAL,true, false, false 
			);
		
		chart.setTitle(new TextTitle("XX公司员工学历比例图",font));
		
		//重新设置图例的字体,保证汉字的显示
		LegendTitle legend = chart.getLegend();
		legend.setItemFont(font);
		
		//设置X轴坐标上的文字的字体
		chart.getCategoryPlot().getDomainAxis().setTickLabelFont(font);
		//设置X轴坐标标题的字体
		chart.getCategoryPlot().getDomainAxis().setLabelFont(font);
		
		//设置Y轴坐标上的文字的字体
		chart.getCategoryPlot().getRangeAxis().setTickLabelFont(font);
		//设置Y轴坐标标题的字体
		chart.getCategoryPlot().getRangeAxis().setLabelFont(font);
		
		return chart;
	}		
	public static void main(String[] args) {
		//最终测试一下
		MyBar demo = new MyBar("XX公司员工学历比例图");
		demo.pack();
		RefineryUtilities.centerFrameOnScreen(demo);
		demo.setVisible(true);
	}
}

去运行测试一下,运行结果如下图所示:

图18.3 使用JFreeChart画出的柱状图

18.1.5小结

JFreeChart作为一个免费的功能强大的图形报表工具,专注于如何显示图形报表。因此,在使用JFreeChart的时候,我们不需要关注如何生成图形,只需要专注究竟要显示什么样的数据。

       JFreeChart的功能很多,由于本书的重心是学习Struts2的知识,本章也只是来学习Struts2如何结合使用JFreeChart,并不是JFreeChart的指导用书,因此更多、更复杂的JFreeChart的知识,请参看JFreeChart的文档或相应资料。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4168.html

欢迎访问http://sishuok.com获取更多内容

相关笔记推荐
精品视频课程推荐

单元测试-Junit实战视频教程
JUnit4的基本使用;在maven环境下使用JUnit;用JMock来模拟测试对象要依赖的对象;用cobertura实现覆盖测试;用hundson实现持续集成;JUnit3的基本使用。

Java数据结构和算法精讲版
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。 从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。

深入浅出学Shrio视频教程
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术 技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容

深入浅出学Spring Web MVC视频教程
系统、完整的学习Spring Web MVC开发的知识。包括:Spring Web MVC入门;理解DispatcherServlet;注解式控制器开发详解;数据类型转换;数据格式化;数据验证; 拦截器;对Ajax的支持;文件上传下载;表单标签等内容;最后以一个综合的CRUD带翻页的应用示例来综合所学的知识

ssh+jbpm项目(某集团OA)视频教程
达到能综合使用Struts2+Spring3+Hibernate3+Jbpm4来进行实际项目开发的能力。 包括:ssh和jbpm的整合;数据字典;通用DAO(Spring+Hibernate+泛型+反射+SpEL+模板方法模式);自动生成UUID的加强版;分层开发、SSH联合的基本开发;翻页的taglib;示范真实值和表现值,数据参照的实现;文件上传下载;主子表操;登录验证码;登录控制的拦截器

浏览(5046)|评论(0)   交流分类:Java|笔记分类: 研磨struts2

评论(0)
请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网