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页面的引用

posted @ 2019-04-25 09:23  细竹赫映姬  阅读(90)  评论(0)    收藏  举报