柱状图

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包

JFreeChart_3d

第二步:导入一个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>