ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 研磨Struts2 之 第十六章 整合jfreechart【私塾在线原创】

研磨Struts2 之 第十六章 整合jfreechart【私塾在线原创】

原创 Linux操作系统 作者:ainiyongbu 时间:2012-03-03 14:00:44 0 删除 编辑
视频配套PPT,视频地址【 研磨Struts2视频课程
对于一个企业级的应用而言,经常会用到一些直观的图形化报表,用于帮助用户进行商业决策或者逻辑分析等,比如:
用一个饼图来显示公司员工的学历比例,比如本科生占50%,研究生占30%,博士占20%。
也可以用一个折线图来显示销售人员近几年的业绩,比如,小王2007年销售额15万,2008年20万,2009年20万;而小张2007年销售额10万,2008年50万,2009年100万。
诸如此类,还有很多…
图形化的报表总是比枯燥的数字让人来的有兴趣,而且图形化报表在企业级应用中通常都是必不可少的,那么该怎么实现呢?
JFreeChart就是一个能帮助我们实现图形化报表的开源框架。JFreeChart封装了各种各样的图形化的报表模型,使得我们不用去关心如何画图形报表,而是直接把数据对象交给JFreeChart,由它来帮我们生成图形化的报表,从而使得开发图形化的报表变得非常简单。
要使用JFreeChart来画饼图,首先需要把lib中JFreeChart依赖的jar包添加到web工程中。
方式是:从解压的文件夹中找到lib下的jfreechart-1.0.13.jar和jcommon-1.0.16.jar,拷贝到web工程的WebContent/WEB-INF/lib包下面,这样就可以在工程中引用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 对中文的支持并不好,
涉及到中文的地方需要重新设置 字体才能正常显示。所以会有以下的设置
chart.setTitle(new TextTitle("XX公司员工学历比例图",font));重新设置标题的字体,其中,引用的font对象为这个类的private static final属性。
legend.setItemFont(font);重新设置图例的字体,引用的font对象同上。
plot.setLabelFont(font);重新设置图表的字体,引用的font对象同上。
Struts2并没有求大求全,企图把所有的功能都包含进来,而是设计了一个灵活、可扩展的插件体系,让所有的人都可以以做插件的方式,为Struts2添加新的功能,这也是Struts2非常吸引人的地方之一。
来简单的认识一下Struts2的插件。打开Struts2 下载包中的lib目录struts-2.1.8.1\lib,会发现,这里面以struts2作为文件名开头的文件可以被分成两类,一类是Struts2的核心包,比如struts2-core-2.1.8.1.jar;而其他的都叫struts2-xxx-plugin-2.1.8.1.jar,很显然,后者都是Struts2的插件。
这些插件的存在形式就是普通的jar包,看起来和其他jar包也没什么区别,但是,如果打开来看,就发现内藏玄机了。打开看看,会发现,只要是插件的jar包,其根目录下都有一个叫struts-plugin.xml的文件,里面有这个插件相应的配置。
至此,可以看到Struts2插件的存在方式:
命名规则为struts2-xxx-plugin-版本号.jar
存在形式就是一个普通的jar包。
这个jar包的根目录必须存在一个叫struts-plugin.xml,而其本质就是一个struts.xml。
而使用Struts2插件的时候,只需要把这个jar包拷贝到web工程的编译路径上即可。
1  实现 Action
JFreeChart作为一种结果类型,可以作为某个Action的Result。接下来就来编写一个Action,结合着JFreeChart来实现画饼图。
编写这种Action和编写普通的Action大大的不同。 这种 Action 不需要 execute 法,而是需要一个 getChart 方法,这个方法必须是公有的,且返回一个JFreeChart 对象。
2  配置 struts.xml
接下来看看在struts.xml中,Struts2是如何跟JFreeChart结合的,示例代码如下:

java代码:
    
        
        
        400
        300
        
        
    
在配置文件中,我们的包继承了jfreechart-default包;在我们的包中使用了jfreechart-default包中的chart这种;然后通过给元素设置子元素来限定图形化报表的宽和高。
视频配套PPT,视频地址【 研磨Struts2视频课程
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26662749/viewspace-717575/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-03-02

  • 博文量
    17
  • 访问量
    8166