JFreeChart

柱状图

package demo;

import java.awt.Font;
import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
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;

public class BarDemo {

	public static void main(String[] args) {
		//构造数据集合
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(12, "所属单位", "北京");
		dataset.addValue(6, "所属单位", "上海");
		dataset.addValue(2, "所属单位", "深圳");
		
		JFreeChart chart = ChartFactory.createBarChart3D(
							"用户统计报表(所属单位)",		//图形的主标题 
							"所属单位名称", 			//种类轴的标签
							"数量", 					//值轴的标签
							dataset, 				//图形的数据集合
							PlotOrientation.VERTICAL,//图表的显示形式(水平和垂直) 			
							true,					//是否显示子标题 
							true,					//是否生成数据提示 
							true					//是否生成URL链接
		);
		//处理主标题乱码
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
		//处理子标题乱码
		chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
		//获取图表区域对象
		/**
		 * 3种方式获取对象
		 *   * 方式一:断点
		 *   * 方式二:使用System.out.println();
		 *   * 方案三:使用API
		 */
		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));
		
		//设置刻度以1为单位
		numberAxis3D.setAutoTickUnitSelection(false);//手动设置
		NumberTickUnit unit = new NumberTickUnit(1);//以1为单位
		numberAxis3D.setTickUnit(unit);
		
		//获取绘图区域对象
		BarRenderer3D barRenderer3D = (BarRenderer3D) categoryPlot.getRenderer();
		//让图形变得苗条点
		barRenderer3D.setMaximumBarWidth(0.08);
		//在图形上生成数字
		barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		barRenderer3D.setBaseItemLabelsVisible(true);
		barRenderer3D.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
		
		/**在D盘目录下生成图片*/
		File file = new File("D:/chart.png");
		try {
			ChartUtilities.saveChartAsPNG(file, chart, 600, 500);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//使用Rrame加载图形
//		ChartFrame chartFrame = new ChartFrame("xyz", chart);
//		chartFrame.setVisible(true);
//		//输出图形
//		chartFrame.pack();
	}
}

package demo;

import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
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;

public class BarDemo2 {

	public static void main(String[] args) {
		//构造数据集合
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(12, "中国", "北京");
		dataset.addValue(6, "中国", "上海");
		dataset.addValue(2, "中国", "深圳");
		
		dataset.addValue(12, "美国", "西雅图");
		dataset.addValue(6, "美国", "纽约");
		dataset.addValue(2, "美国", "华盛顿");
		
		JFreeChart chart = ChartFactory.createBarChart3D(
							"用户统计报表(所属单位)",		//图形的主标题 
							"所属单位名称", 			//种类轴的标签
							"数量", 					//值轴的标签
							dataset, 				//图形的数据集合
							PlotOrientation.VERTICAL,//图表的显示形式(水平和垂直) 			
							true,					//是否显示子标题 
							true,					//是否生成数据提示 
							true					//是否生成URL链接
		);
		//处理主标题乱码
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
		//处理子标题乱码
		chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
		//获取图表区域对象
		/**
		 * 3种方式获取对象
		 *   * 方式一:断点
		 *   * 方式二:使用System.out.println();
		 *   * 方案三:使用API
		 */
		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));
		
		//设置刻度以1为单位
		numberAxis3D.setAutoTickUnitSelection(false);//手动设置
		NumberTickUnit unit = new NumberTickUnit(1);//以1为单位
		numberAxis3D.setTickUnit(unit);
		
		//获取绘图区域对象
		BarRenderer3D barRenderer3D = (BarRenderer3D) categoryPlot.getRenderer();
		//让图形变得苗条点
		barRenderer3D.setMaximumBarWidth(0.08);
		//在图形上生成数字
		barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		barRenderer3D.setBaseItemLabelsVisible(true);
		barRenderer3D.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
		
		//使用Rrame加载图形
		ChartFrame chartFrame = new ChartFrame("xyz", chart);
		chartFrame.setVisible(true);
		//输出图形
		chartFrame.pack();
	}
}
线性图

package demo;

import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Shape;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
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.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;

public class LineDemo {

	public static void main(String[] args) {
		//构造数据集合
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(12, "中国", "北京");
		dataset.addValue(6, "中国", "上海");
		dataset.addValue(2, "中国", "深圳");
		
		dataset.addValue(10, "中国1", "北京");
		dataset.addValue(3, "中国1", "上海");
		dataset.addValue(1, "中国1", "深圳");
		
		dataset.addValue(9, "中国2", "北京");
		dataset.addValue(5, "中国2", "上海");
		dataset.addValue(1, "中国2", "深圳");
		
//		dataset.addValue(10, "美国", "西雅图");
//		dataset.addValue(6, "美国", "纽约");
//		dataset.addValue(2, "美国", "华盛顿");
		
		JFreeChart chart = ChartFactory.createLineChart(
							"用户统计报表(所属单位)",		//图形的主标题 
							"所属单位名称", 			//种类轴的标签
							"数量", 					//值轴的标签
							dataset, 				//图形的数据集合
							PlotOrientation.VERTICAL,//图表的显示形式(水平和垂直) 			
							true,					//是否显示子标题 
							true,					//是否生成数据提示 
							true					//是否生成URL链接
		);
		//处理主标题乱码
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
		//处理子标题乱码
		chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
		//获取图表区域对象
		/**
		 * 3种方式获取对象
		 *   * 方式一:断点
		 *   * 方式二:使用System.out.println();
		 *   * 方案三:使用API
		 */
		CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
		//获取X轴对象
		CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
		//获取Y轴对象
		NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
		//处理X轴上的乱码
		categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
		//处理X轴外的乱码
		categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
		//处理Y轴上的乱码
		numberAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
		//处理Y轴外的乱码
		numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
		
		//设置刻度以1为单位
		numberAxis.setAutoTickUnitSelection(false);//手动设置
		NumberTickUnit unit = new NumberTickUnit(1);//以1为单位
		numberAxis.setTickUnit(unit);
		
		//获取绘图区域对象
		LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot.getRenderer();

		//在图形上生成数字
		lineAndShapeRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		lineAndShapeRenderer.setBaseItemLabelsVisible(true);
		lineAndShapeRenderer.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
		
		//设置转折点(以正方形作为转折点)
		Shape shape = new Rectangle(10,10);
		lineAndShapeRenderer.setSeriesShape(0, shape);//参数一int类型表示第几条线,默认是0,0表示第一条线
		lineAndShapeRenderer.setSeriesShapesVisible(0, true);
		
		lineAndShapeRenderer.setSeriesShape(1, shape);//参数一int类型表示第几条线,默认是0,0表示第一条线
		lineAndShapeRenderer.setSeriesShapesVisible(1, true);
		
		lineAndShapeRenderer.setSeriesShape(2, shape);//参数一int类型表示第几条线,默认是0,0表示第一条线
		lineAndShapeRenderer.setSeriesShapesVisible(2, true);
		
		//使用Rrame加载图形
		ChartFrame chartFrame = new ChartFrame("xyz", chart);
		chartFrame.setVisible(true);
		//输出图形
		chartFrame.pack();
	}
}


package demo;

import java.awt.*;
import java.awt.geom.Ellipse2D;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.*;

public class LineChartDemo1 extends ApplicationFrame
{

    public LineChartDemo1(String s)
    {
        super(s);
        JPanel jpanel = createDemoPanel();
        jpanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(jpanel);
    }

    private static CategoryDataset createDataset()
    {
        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
        defaultcategorydataset.addValue(212D, "Classes", "JDK 1.0");
        defaultcategorydataset.addValue(504D, "Classes", "JDK 1.1");
        defaultcategorydataset.addValue(1520D, "Classes", "JDK 1.2");
        defaultcategorydataset.addValue(1842D, "Classes", "JDK 1.3");
        defaultcategorydataset.addValue(2991D, "Classes", "JDK 1.4");
        defaultcategorydataset.addValue(3500D, "Classes", "JDK 1.5");
        return defaultcategorydataset;
    }

    private static JFreeChart createChart(CategoryDataset categorydataset)
    {
        JFreeChart jfreechart = ChartFactory.createLineChart("Java Standard Class Library", null, "Class Count", categorydataset, PlotOrientation.VERTICAL, false, true, false);
        jfreechart.addSubtitle(new TextTitle("Number of Classes By Release"));
        TextTitle texttitle = new TextTitle("Source: Java In A Nutshell (5th Edition) by David Flanagan (O'Reilly)");
        texttitle.setFont(new Font("SansSerif", 0, 10));
        texttitle.setPosition(RectangleEdge.BOTTOM);
        texttitle.setHorizontalAlignment(HorizontalAlignment.RIGHT);
        jfreechart.addSubtitle(texttitle);
        jfreechart.setBackgroundPaint(Color.white);
        CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
        categoryplot.setBackgroundPaint(Color.lightGray);
        categoryplot.setRangeGridlinePaint(Color.gray);
        categoryplot.setRangeGridlinesVisible(false);
        java.net.URL url = (demo.LineChartDemo1.class).getClassLoader().getResource("OnBridge11small.png");
        if(url != null)
        {
            ImageIcon imageicon = new ImageIcon(url);
            categoryplot.setBackgroundImage(imageicon.getImage());
        }
        categoryplot.setBackgroundImageAlpha(1.0F);
        NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
        lineandshaperenderer.setShapesVisible(true);
        lineandshaperenderer.setDrawOutlines(true);
        lineandshaperenderer.setUseFillPaint(true);
        lineandshaperenderer.setFillPaint(Color.white);
        lineandshaperenderer.setSeriesStroke(0, new BasicStroke(3F));
        lineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F));
        lineandshaperenderer.setSeriesShape(0, new java.awt.geom.Ellipse2D.Double(-5D, -5D, 10D, 10D));
        return jfreechart;
    }

    public static JPanel createDemoPanel()
    {
        JFreeChart jfreechart = createChart(createDataset());
        return new ChartPanel(jfreechart);
    }

    public static void main(String args[])
    {
        LineChartDemo1 linechartdemo1 = new LineChartDemo1("JFreeChart - Line Chart Demo 1");
        linechartdemo1.pack();
        RefineryUtilities.centerFrameOnScreen(linechartdemo1);
        linechartdemo1.setVisible(true);
    }
package demo;

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.*;
import org.jfree.ui.*;

public class LineChartDemo2 extends ApplicationFrame
{

    public LineChartDemo2(String s)
    {
        super(s);
        XYDataset xydataset = createDataset();
        JFreeChart jfreechart = createChart(xydataset);
        ChartPanel chartpanel = new ChartPanel(jfreechart);
        chartpanel.setPreferredSize(new Dimension(500, 270));
        setContentPane(chartpanel);
    }

    private static XYDataset createDataset()
    {
        XYSeries xyseries = new XYSeries("First");
        xyseries.add(1.0D, 1.0D);
        xyseries.add(2D, 4D);
        xyseries.add(3D, 3D);
        xyseries.add(4D, 5D);
        xyseries.add(5D, 5D);
        xyseries.add(6D, 7D);
        xyseries.add(7D, 7D);
        xyseries.add(8D, 8D);
        XYSeries xyseries1 = new XYSeries("Second");
        xyseries1.add(1.0D, 5D);
        xyseries1.add(2D, 7D);
        xyseries1.add(3D, 6D);
        xyseries1.add(4D, 8D);
        xyseries1.add(5D, 4D);
        xyseries1.add(6D, 4D);
        xyseries1.add(7D, 2D);
        xyseries1.add(8D, 1.0D);
        XYSeries xyseries2 = new XYSeries("Third");
        xyseries2.add(3D, 4D);
        xyseries2.add(4D, 3D);
        xyseries2.add(5D, 2D);
        xyseries2.add(6D, 3D);
        xyseries2.add(7D, 6D);
        xyseries2.add(8D, 3D);
        xyseries2.add(9D, 4D);
        xyseries2.add(10D, 3D);
        XYSeriesCollection xyseriescollection = new XYSeriesCollection();
        xyseriescollection.addSeries(xyseries);
        xyseriescollection.addSeries(xyseries1);
        xyseriescollection.addSeries(xyseries2);
        return xyseriescollection;
    }

    private static JFreeChart createChart(XYDataset xydataset)
    {
        JFreeChart jfreechart = ChartFactory.createXYLineChart("Line Chart Demo 2", "X", "Y", xydataset, PlotOrientation.VERTICAL, true, true, false);
        jfreechart.setBackgroundPaint(Color.white);
        XYPlot xyplot = (XYPlot)jfreechart.getPlot();
        xyplot.setBackgroundPaint(Color.lightGray);
        xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
        xyplot.setDomainGridlinePaint(Color.white);
        xyplot.setRangeGridlinePaint(Color.white);
        XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
        xylineandshaperenderer.setShapesVisible(true);
        xylineandshaperenderer.setShapesFilled(true);
        NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        return jfreechart;
    }

    public static JPanel createDemoPanel()
    {
        JFreeChart jfreechart = createChart(createDataset());
        return new ChartPanel(jfreechart);
    }

    public static void main(String args[])
    {
        LineChartDemo2 linechartdemo2 = new LineChartDemo2("Line Chart Demo 2");
        linechartdemo2.pack();
        RefineryUtilities.centerFrameOnScreen(linechartdemo2);
        linechartdemo2.setVisible(true);
    }
}
饼图

package demo;

import java.awt.Font;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;

public class PieDemo {

	public static void main(String[] args) {
		//构造数据集合
		DefaultPieDataset dataset = new DefaultPieDataset();
		dataset.setValue("北京",12);
		dataset.setValue("上海",6);
		dataset.setValue("深圳",2);
		
		JFreeChart chart = ChartFactory.createPieChart3D(
							"用户统计报表(所属单位)",		//图形的主标题 
							dataset, 				//图形的数据集合		
							true,					//是否显示子标题 
							true,					//是否生成数据提示 
							true					//是否生成URL链接
		);
		//处理主标题乱码
		chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
		//处理子标题乱码
		chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
		//获取图表区域对象
		/**
		 * 3种方式获取对象
		 *   * 方式一:断点
		 *   * 方式二:使用System.out.println();
		 *   * 方案三:使用API
		 */
		PiePlot3D piePlot3D = (PiePlot3D) chart.getPlot();
		//处理图形上显示的乱码
		piePlot3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
		//在图形上显示数值(格式:北京 12(60%))
		String labelFormat = "{0} {1} ({2})";
		piePlot3D.setLabelGenerator(new StandardPieSectionLabelGenerator(labelFormat));

		
		//使用Rrame加载图形
		ChartFrame chartFrame = new ChartFrame("xyz", chart);
		chartFrame.setVisible(true);
		//输出图形
		chartFrame.pack();
	}
}

struct2 整合

第一步:导入jar包


第二步:导入一个jsp的文件,userReport.jsp,跳转到页面后传递生成图片的文件名,用来加载图片:

<img src="${pageContext.request.contextPath}/chart/${filename}" border="0">

第三步:

在userIndex.jsp中定义:

input style="font-size:12px; color:black; height=20;width=80" id="BT_Add" type="button" value="人员统计(所属单位)" name="BT_Add" 	 οnclick="openWindow('${pageContext.request.contextPath }/system/elecUserAction_chartUser.do','700','400')">  

在Action中定义:

public String chartUser(){
		List<Object []> list = elecUserService.chartUser("所属单位","jctID");
		//使用Jfreechart生成图片,将图片生成到chart的文件夹下,将图片的名称放置到request的对象中,名称filename
		String filename = ChartUtils.createBarChart(list);//返回文件名
		request.setAttribute("filename", filename);
		return "chartUser";
	}
<result name="chartUser">/WEB-INF/page/system/userReport.jsp</result>

第四步:

在Dao中定义:使用聚合函数进行分组统计。

public List<Object[]> chartUser(String zName, String eName) {
		final String sql = "SELECT a.keyword,a.ddlName,COUNT(a.ddlCode) FROM elec_systemddl a " +
				     " INNER JOIN elec_user b ON a.ddlCode = b."+eName+" AND a.keyword='"+zName+"' " +
				     " WHERE b.isDuty = '1' " +
				     " GROUP BY a.keyword,a.ddlName " +
				     " ORDER BY a.ddlCode ASC";
		List<Object[]> list = this.getHibernateTemplate().execute(new HibernateCallback() {

			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				SQLQuery query = session.createSQLQuery(sql)
						.addScalar("keyword", Hibernate.STRING)
						.addScalar("ddlName", Hibernate.STRING)
						.addScalar("COUNT(a.ddlCode)", Hibernate.INTEGER);
				//标量查询(如果使用sql语句,如果用连接查询,有可能2张表的字段出现冲突,就要使用投影查询)
				return query.list();
			}
			
		});
		return list;
	}

第五步:封装ChartUtils的工具类,生成各种图形


public class ChartUtils {

	/**生成柱状图,返回文件名(格式,日期时分秒)*/
	public static String createBarChart(List<Object[]> list) {
		//图形的数据集合
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		if(list!=null && list.size()>0){
			for(Object[] o:list){
				//a.keyword,a.ddlName,COUNT(a.ddlCode)
				dataset.addValue(Double.parseDouble(o[2].toString()), o[0].toString(), o[1].toString());
			}
		}
		//工厂模式
		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));
		//获取图表区域对象
		/**
		 * 图表区域对象:
		 *  (1)使用断点:
		 *  (2)使用System.out.println(chart.getPlot())
		 *  (3)使用API文档
		 */
		CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
		//获取X轴对象
		CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();
		//获取Y轴对象
		NumberAxis3D numberAxis3D = (NumberAxis3D) categoryPlot.getRangeAxis();
		//X轴外的乱码
		categoryAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
		//X轴上的乱码
		categoryAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
		//Y轴外的乱码
		numberAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
		//Y轴上的乱码
		numberAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
		//设置Y轴上的刻度以1为单位
		numberAxis3D.setAutoTickUnitSelection(false);
		NumberTickUnit unit = new NumberTickUnit(1);
		numberAxis3D.setTickUnit(unit);
		
		//获取绘图区域对象
		BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();
		//让图形变得苗条点
		barRenderer3D.setMaximumBarWidth(0.08);
		
		//让在图形上生成数字
		barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		barRenderer3D.setBaseItemLabelsVisible(true);
		barRenderer3D.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
		
		//在项目中的chart的文件夹下生成图片
		//获取chart的文件夹
		String basePath = ServletActionContext.getServletContext().getRealPath("/chart");
		//文件名(日期)
		String filename = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")+".png";
		File file = new File(basePath+"/"+filename);
		try {
			ChartUtilities.saveChartAsPNG(file, chart, 600, 500);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return filename;
	}

}

第六步:在userReport.jsp中加载:

<body>

<fieldset style="width: 600px; height: 600px; padding: 1 background:${pageContext.request.contextPath }/images/back1.JPG"><legend>
<font color="#0000FF">
<img border="0" src="${pageContext.request.contextPath }/images/zoom.gif" width="14" height="14"> 报表统计</font></legend>		
	<img src="${pageContext.request.contextPath}/chart/${filename}" border="0">
</fieldset>
</body>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值