Struts2,jfreechart报表
要使用,jfreechart报表,必须要先引入包
下边是三个action模板
1.饼状图
package action; import java.awt.Font; import java.io.IOException; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PiePlot; import org.jfree.data.general.DefaultPieDataset; import com.opensymphony.xwork2.ActionSupport; public class ShowAction extends ActionSupport { //创建日志记录对象 private static Logger log=LogManager.getLogger(ShowAction.class); public void showImg(){ log.info("开始产生报表数据"); //创建图形数据源对象并初始化数据 DefaultPieDataset dpd=new DefaultPieDataset(); dpd.setValue("java", 3000); dpd.setValue(".net", 1000); dpd.setValue("ios", 1500); dpd.setValue("andriod", 1200); dpd.setValue("php", 800); dpd.setValue("第一阶段", 2000); dpd.setValue("s2", 300); dpd.setValue("s3", 2500); log.info("生成报表"); //创建JFreeChart对象 参数:标题、数据、是否显示图例、是否显示工具提示、是否生成url JFreeChart jf=ChartFactory.createPieChart3D("德克特专业情况报表分析图", dpd, true, false, false); log.info("设置报表相关字体"); //设置字体,避免出现乱码 jf.getTitle().setFont(new Font("宋体", Font.BOLD,20));//标题 PiePlot pp = (PiePlot)jf.getPlot();//图形 pp.setLabelFont(new Font("楷体", Font.BOLD, 15)); pp.setBackgroundAlpha(0.2f);//背景透明度 jf.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));//图例 log.info("将报表写入输出流中"); //写入输出流/生成图片 try { ChartUtilities.writeChartAsJPEG(ServletActionContext.getResponse().getOutputStream(), jf, 500, 300); } catch (IOException e) { e.printStackTrace(); } log.info("报表生成结束"); } }
2.柱状图
package action; import java.awt.Font; import java.io.File; import java.io.IOException; import org.apache.struts2.ServletActionContext; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis3D; import org.jfree.chart.axis.NumberAxis3D; import org.jfree.chart.axis.NumberTickUnit; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer3D; import org.jfree.data.category.DefaultCategoryDataset; import com.opensymphony.xwork2.ActionSupport; public class HistogramAction extends ActionSupport{ public void histogram(){ // TODO Auto-generated method stub DefaultCategoryDataset dataset=new DefaultCategoryDataset(); //添加数据 dataset.addValue(98, "数学", "张三"); dataset.addValue(87, "语文", "张三"); dataset.addValue(68, "数学", "李四"); dataset.addValue(89, "语文", "李四"); dataset.addValue(56, "数学", "王五"); dataset.addValue(96, "语文", "王五"); JFreeChart chart=ChartFactory.createBarChart3D( "成绩统计表", "学生姓名",//X轴的标签 "分数",//Y轴的标签 dataset, //图标显示的数据集合 PlotOrientation.VERTICAL, //图像的显示形式(水平或者垂直) true,//是否显示子标题 true,//是否生成提示的标签 true); //是否生成URL链接 //处理图形上的乱码 //处理主标题的乱码 chart.getTitle().setFont(new Font("宋体",Font.BOLD,18)); //处理子标题乱码 chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15)); //获取图表区域对象 CategoryPlot categoryPlot = (CategoryPlot)chart.getPlot(); //获取X轴的对象 CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis(); //获取Y轴的对象 NumberAxis3D numberAxis3D = (NumberAxis3D)categoryPlot.getRangeAxis(); //处理X轴上的乱码 categoryAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15)); //处理X轴外的乱码 categoryAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15)); //处理Y轴上的乱码 numberAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15)); //处理Y轴外的乱码 numberAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15)); //处理Y轴上显示的刻度,以10作为1格 numberAxis3D.setAutoTickUnitSelection(false); NumberTickUnit unit = new NumberTickUnit(10); numberAxis3D.setTickUnit(unit); //获取绘图区域对象 BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer(); //设置柱形图的宽度 barRenderer3D.setMaximumBarWidth(0.07); //在图形上显示数字 barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); barRenderer3D.setBaseItemLabelsVisible(true); barRenderer3D.setBaseItemLabelFont(new Font("宋体",Font.BOLD,15)); //在D盘目录下生成图片 File file = new File("chart.jpeg"); try { ChartUtilities.writeChartAsJPEG(ServletActionContext.getResponse().getOutputStream(), chart, 500, 300); //ChartUtilities.saveChartAsJPEG(file, chart, 800, 600); } catch (IOException e) { e.printStackTrace(); } /* //使用ChartFrame对象显示图像 ChartFrame frame = new ChartFrame("xyz",chart); frame.setVisible(true); frame.pack();*/ } }
3.现状图
package action; import java.awt.Color; import java.awt.Font; import java.io.IOException; import org.apache.struts2.ServletActionContext; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.StandardChartTheme; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import com.opensymphony.xwork2.ActionSupport; public class LineAction extends ActionSupport{ public void showline(){ StandardChartTheme mChartTheme = new StandardChartTheme("CN"); mChartTheme.setLargeFont(new Font("黑体", Font.BOLD, 20)); mChartTheme.setExtraLargeFont(new Font("宋体", Font.PLAIN, 15)); mChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); ChartFactory.setChartTheme(mChartTheme); CategoryDataset mDataset = GetDataset(); JFreeChart mChart = ChartFactory.createLineChart( "折线图",//图名字 "年份",//横坐标 "数量",//纵坐标 mDataset,//数据集 PlotOrientation.VERTICAL, true, // 显示图例 true, // 采用标准生成器 false);// 是否生成超链接 CategoryPlot mPlot = (CategoryPlot)mChart.getPlot(); mPlot.setBackgroundPaint(Color.LIGHT_GRAY); mPlot.setRangeGridlinePaint(Color.BLUE);//背景底部横虚线 mPlot.setOutlinePaint(Color.RED);//边界线 /*ChartFrame mChartFrame = new ChartFrame("折线图", mChart); mChartFrame.pack(); mChartFrame.setVisible(true);*/ try { ChartUtilities.writeChartAsJPEG(ServletActionContext.getResponse().getOutputStream(), mChart, 500, 300); } catch (IOException e) { e.printStackTrace(); } } public static CategoryDataset GetDataset() { DefaultCategoryDataset mDataset = new DefaultCategoryDataset(); mDataset.addValue(1, "First", "2013"); mDataset.addValue(3, "First", "2014"); mDataset.addValue(2, "First", "2015"); mDataset.addValue(6, "First", "2016"); mDataset.addValue(5, "First", "2017"); mDataset.addValue(12, "First", "2018"); mDataset.addValue(14, "Second", "2013"); mDataset.addValue(13, "Second", "2014"); mDataset.addValue(12, "Second", "2015"); mDataset.addValue(9, "Second", "2016"); mDataset.addValue(5, "Second", "2017"); mDataset.addValue(7, "Second", "2018"); return mDataset; } }
Sturts2 配置文件中的配置
JSP页面的引用