1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JFreeChart在Struts2中实现3D饼状图统计

JFreeChart在Struts2中实现3D饼状图统计

时间:2022-06-19 17:26:36

相关推荐

JFreeChart在Struts2中实现3D饼状图统计

在Struts2中,用JFreeChart实现3D饼状图统计

前段时间学习了一下JFreeChart,现在来整理一下自己所作的实例。

下面分别用两种方式来实现:一种是以java应用程序的方式,一种是以web项目程序的方式

需要加入的jar包有:jcommon-1.0.17.jar 、jfreechart-1.0.14.jar(前两个是JFreeChart中所带的,在下载的JFreeChart的lib目录下) 、struts2-jfreechart-plugin-2.3.16.3.jar(这个是Struts2所带的,在下载的Struts2的lib目录下)、struts2所常用的9个核心jar包。 jar包的版本可以有所不同

上述jar包放入到项目的WebRoot/WEB-INF/lib目录下

1、 以java应用程序的方式运行,在web项目中的src目录下新建包: com.jfreechart.test , 在该包中新建类 PieChart3DTest.java

PieChart3DTest.java

package com.jfreechart.test;import java.awt.Font;import java.io.File;import java.io.IOException;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;import org.jfree.util.Rotation;public class PieChart3DTest {public static void main(String[] args) throws IOException{//步骤1:创建CategoryDataset对象(准备数据)PieDataset dataset = createDataset();//步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置JFreeChart jfreeChart = createChart(dataset);//步骤3:将JFreeChart对象输出到文件saveAsFile("F:\\PieChart3D.jpg", jfreeChart, 800, 600);}/*** 创建一个dataset,该dataset包含图表要显示的数据* @return DefaultPieDataset*/private static DefaultPieDataset createDataset() {//DefaultPieDataset是默认的饼形图数据集合对象类,可用于创建饼形图数据集合对象DefaultPieDataset dataset = new DefaultPieDataset(); //为dataset对象设值dataset.setValue("文学类",20000); dataset.setValue("科技类",42000); dataset.setValue("财经类",21000); dataset.setValue("娱乐类",29000); //返回数据集合对象return dataset; }/** * 根据PieDataset创建JFreeChart对象* @return JFreeChart */public static JFreeChart createChart(PieDataset pieDataset) {//JFreeChart类是一个制图对象类,先用它来创建一个制图对象chart//ChartFactory类是制图工厂类,用它来为制图对象chart完成实例化//createPieChart3D()是制图工厂的一个方法,用来创建一个3D的饼形图对象JFreeChart chart = ChartFactory.createPieChart3D("图书销量统计图", //图表标题pieDataset, //数据集true,//是否显示图例false, //是否采用标准生成器false//是否支持超链接);//通过JFreeChart对象的 setTitle方法,修改统计图表的标题部分(包括修改图表标题内容、字体大小等)chart.setTitle(new TextTitle("图书销量统计图", new Font("黑体", Font.ITALIC , 22))); //调用 JFreeChart对象的 getLegend(int index)方法,取得该图表的指定索引的图例对象,通过 LegendTitle对象来修改统计图表的图例 LegendTitle legend = chart.getLegend(0); //设置图例的字体和字体大小,即位于下方的字的字体和大小legend.setItemFont(new Font("宋体", Font.BOLD, 14));// 设置画布背景色//chart.setBackgroundPaint(new Color(192, 228, 106));//取得饼图3D的绘图(plot3D)对象PiePlot3D plot3D = (PiePlot3D)chart.getPlot();//设置Pie图的分类标签的字体,即位于Pie图的中间部分的每个扇形旁边对应的字的字体plot3D.setLabelFont(new Font("隶书", Font.BOLD, 16));//设置数据区的背景透明度,范围在0.0~1.0间plot3D.setBackgroundAlpha(0.9F);//设置PieChart是否显示为圆形 plot3D.setCircular(true);//完全关闭片区外廓,若将值设为 true 即可让外廓显示出来plot3D.setSectionOutlinesVisible(false);//设置忽略零值,不设值时默认会将一个标签放置在饼图片区显示的位置,并且在图表的图例中添加一个分类。//plot3D.setIgnoreZeroValues(true);//设置忽略null值,不设值时默认情况跟零值一样//plot3D.setIgnoreNullValues(true);//设置旋转角度 plot3D.setStartAngle(90.0); //设置旋转方向,Rotation.CLOCKWISE)为顺时针。 plot3D.setDirection(Rotation.CLOCKWISE); //设置图表透明图0.0~1.0范围。0.0为完全透明,1.0为完全不透明。 plot3D.setForegroundAlpha(0.4F); //设置每个数据区的填充颜色,不设置即默认,默认时是自动分配的//plot3D.setSectionPaint("文学类", new Color(200, 255, 255)); // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位plot3D.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例//plot3D.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));return chart;}/*** 保存图表为文件 */public static void saveAsFile(String filePath, JFreeChart jfreeChart,int weight, int height) throws IOException { //输出图表到文件,saveCharAsJPEG()方法的参数(File file,JFreeChart chart,int width,int height)ChartUtilities.saveChartAsJPEG(new File(filePath), jfreeChart, weight, height);}}</span><strong></strong>

以java应用程序的方式,运行上面的 PieChart3DTest.java ,便可以在F盘的根目录下产生了一个名叫PieChart3D.jpg文件,如下图所示:

2、 以web项目程序的方式运行

(1)在web项目中的src目录下新建包:com.jfreechart.action,在该包中新建类PieChart3DAction.java

PieChart3DAction.java

package com.jfreechart.action;import java.awt.Font;import java.io.File;import java.io.IOException;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.Map;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.general.DefaultPieDataset;import org.jfree.util.Rotation;import mons.FileUtil;import com.opensymphony.xwork2.ActionContext;public class PieChart3DAction {private JFreeChart chart;// 必须提供 getChart() 方法,且由该方法返回 JFreeChart 对象public JFreeChart getChart() throws Exception {//JFreeChart类是一个制图对象类,先用它来创建一个制图对象chart//ChartFactory类是制图工厂类,用它来为制图对象chart完成实例化//createPieChart3D()是制图工厂的一个方法,用来创建一个3D的饼形图对象chart = ChartFactory.createPieChart3D("图书销量统计图", //图表标题createDataset(), //数据集true,//是否显示图例false, //是否采用标准生成器false//是否支持超链接);//通过JFreeChart对象的 setTitle方法,修改统计图表的标题部分(包括修改图表标题内容、字体大小等)chart.setTitle(new TextTitle("图书销量统计图", new Font("黑体", Font.ITALIC , 22))); //调用 JFreeChart对象的 getLegend(int index)方法,取得该图表的指定索引的图例对象,通过 LegendTitle对象来修改统计图表的图例 LegendTitle legend = chart.getLegend(0); //设置图例的字体和字体大小,即位于下方的字的字体和大小legend.setItemFont(new Font("宋体", Font.BOLD, 14));// 设置画布背景色//chart.setBackgroundPaint(new Color(192, 228, 106));//取得饼图3D的绘图(plot3D)对象PiePlot3D plot3D = (PiePlot3D)chart.getPlot();//设置Pie图的分类标签的字体,即位于Pie图的中间部分的每个扇形旁边对应的字的字体plot3D.setLabelFont(new Font("隶书", Font.BOLD, 16));//设置数据区的背景透明度,范围在0.0~1.0间plot3D.setBackgroundAlpha(0.9F);//设置PieChart是否显示为圆形 plot3D.setCircular(true);//完全关闭片区外廓,若将值设为 true 即可让外廓显示出来plot3D.setSectionOutlinesVisible(false);//设置忽略零值,不设值时默认会将一个标签放置在饼图片区显示的位置,并且在图表的图例中添加一个分类。//plot3D.setIgnoreZeroValues(true);//设置忽略null值,不设值时默认情况跟零值一样//plot3D.setIgnoreNullValues(true);//设置旋转角度 plot3D.setStartAngle(90.0); //设置旋转方向,Rotation.CLOCKWISE)为顺时针。 plot3D.setDirection(Rotation.CLOCKWISE); //设置图表透明图0.0~1.0范围。0.0为完全透明,1.0为完全不透明。 plot3D.setForegroundAlpha(0.4F); //设置每个数据区的填充颜色,不设置即默认,默认时是自动分配的//plot3D.setSectionPaint("文学类", new Color(200, 255, 255)); // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位plot3D.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例//plot3D.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));//设置生成的图表的文件名String fileName = "PieChart3DBook.jpg";//设置图像输出的指定路径String filePath = FileUtil.getWebRootPath()+"images\\chart\\"+fileName;//输出图表到文件saveAsFile(filePath, chart, 800, 600);//取得request对象Map request = (Map)ActionContext.getContext().get("request");//把生成的图表文件的路径filePath放进request对象中request.put("filePath", filePath);return chart;}/*** 保存图表为文件 */public static void saveAsFile(String filePath, JFreeChart jfreeChart,int weight, int height) throws IOException { //输出图表到文件,saveCharAsJPEG()方法的参数(File file,JFreeChart chart,int width,int height)ChartUtilities.saveChartAsJPEG(new File(filePath), jfreeChart, weight, height);}/*** 创建一个dataset,该dataset包含图表要显示的数据* @return DefaultPieDataset*/private static DefaultPieDataset createDataset() {//DefaultPieDataset是默认的饼形图数据集合对象类,可用于创建饼形图数据集合对象DefaultPieDataset dataset = new DefaultPieDataset(); //为dataset对象设值dataset.setValue("文学类",20000); dataset.setValue("科技类",42000); dataset.setValue("财经类",21000); dataset.setValue("娱乐类",29000); //返回数据集合对象return dataset; }//在struts.xml中的对应<action>里,应该写的是 method="pieChart3D" 和 <result type="chart">public String pieChart3D() {return "success";}}

(2)在web项目中的src目录下新建struts.xml文件

struts.xml[html]view plaincopyprint?<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""/dtds/struts-2.1.dtd"> <struts> <!--配置Struts2应用中的常量--> <constantname="struts.i18n.encoding"value="UTF-8"/><!--配置本应用中的包,继承jfreechart-default包--> <packagename="chart"extends="jfreechart-default"> <!--定义一个名为barChart3D的Action--> <actionname="pieChart3D"class="com.jfreechart.action.BarChart3DAction"method="pieChart3D"> <resulttype="chart"> /PieChart3D.jsp <!--定义JFreeChart报表的大小--> <paramname="width">800</param> <paramname="height">500</param> </result> </action> </package> </struts>

(3))修改在web项目中的WebRoot/WEB-INF/目录下的web.xml

web.xml[java]view plaincopyprint? <?xmlversion="1.0"encoding="UTF-8"?> <web-appversion="3.0" xmlns="/xml/ns/javaee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd"> <!--设置struts2过滤器--> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--设置欢迎页面--> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--session超时定义,单位为分钟--> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>

(4)在web项目中的src目录下新建包: mons , 在该包中新建类 FileUtil.java

FileUtil.java[java]view plaincopyprint? mons; importjavax.servlet.ServletContext; importorg.apache.struts2.ServletActionContext; importcom.opensymphony.xwork2.ActionContext; publicclassFileUtil{ /** *获得web项目根目录 */ publicstaticStringgetWebRootPath()throwsException{ ActionContextactionContext=ActionContext.getContext(); ServletContextservletContext=(ServletContext)actionContext.get(ServletActionContext.SERVLET_CONTEXT); StringrootPath=servletContext.getRealPath("/"); returnrootPath; } }

(5)在web项目中的WebRoot/目录下新建index.jsp、PieChart3D.jsp

index.jsp[java]view plaincopyprint? <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <% Stringpath=request.getContextPath(); StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <html> <head> <basehref="<%=basePath%>"> <title>首页</title> </head> <body> <ahref="barChart3D.action">查看3D饼状图</a><br/> </body> </html> PieChart3D.jsp[java]view plaincopyprint? <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <%@taglibprefix="s"uri="/struts-tags"%> <% Stringpath=request.getContextPath(); StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <html> <head> <basehref="<%=basePath%>"> <title>3D饼状图</title> </head> <body> <imgsrc="<s:propertyvalue="#request.filePath"/>"/> </body> </html>

完成以上步骤后,把项目部署到服务器,在浏览器中访问该项目的index.jsp文件,点击“查看3D饼状图”的链接,即可跳转到PieChart3D.jsp页面,3D饼状图图表就显示在PieChart3D.jsp页面上了,图表的效果如上图一致。另外,上述所用的方法是 把图表先生成一个jpg文件,存放在服务器上的该web项目的相关目录下,然后在前台的jsp页面中引用该文件在项目中的的文件路径,即可把图表显示到前台页面中

整个项目的源码可在/detail/wangcunhuazi/8134133这里下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。