(1)生成对应的数据源DataSet,如直方图CategoryDataset、折线图CategoryPlot
(2)使用ChartFactory生成与DataSet相对应的Chart同时生成X/Y轴的数字
(3)设置Chart的X轴,Y轴上字体格式
(4)生成报表。
具体步骤如下:
(1) 生成对应的DataSet
private staticCategoryDataset getDoctorDataSet() {
//创建一个3D直方图DefaultCategoryDataset数据源
DefaultCategoryDataset dataset =new DefaultCategoryDataset();
List<Map<String,Object>>list = new ArrayList<Map<String,Object>>();
//在此处通过调用系统Service层与数据库的连接,将数据转化为Map然后放入List中
for(Map<String,Object> m:list){
Object cs =m.get("cs");
//将数据源添加到DataSet中
dataset.addValue(Integer.parseInt(cs.toString()),doctor.get("doctorname").toString(),m.get("st").toString());
}
return dataset;
}
(2) 使用ChartFactory生成报表
JFreeChart chart =ChartFactory.createBarChart3D("部门统计", //图表标题
"", // 目录轴的显示标签
"次数", //数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL,// 图表方向:水平、垂直
true,// 是否显示图例(对于简单的柱状图必须是 false)
false, // 是否生成工具
false // 是否生成 URL 链接
);
(3 ) 设置X轴,Y轴显示编码
public static voidsetBar3DFont(JFreeChart chart) {
CategoryPlot plot =chart.getCategoryPlot();//设置标题字体
chart.getTitle().setFont(newFont("宋体", Font.PLAIN, 14)); //Y轴
NumberAxis numberaxis =(NumberAxis) plot.getRangeAxis();//X轴
CategoryAxis domainAxis =plot.getDomainAxis();
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(newFont("sans-serif", Font.PLAIN, 11));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(newFont("宋体", Font.PLAIN, 14));
/*------设置Y轴坐标上的文字-----------*/
numberaxis.setTickLabelFont(newFont("sans-serif", Font.PLAIN, 12));
/*------设置Y轴的标题文字------------*/
numberaxis.setLabelFont(newFont("黑体", Font.PLAIN, 12));
/*------这句代码解决了底部汉字乱码的问题-----------*/
chart.getLegend().setItemFont(newFont("宋体", Font.PLAIN, 12));
}
}
(4) 报表生成
为了生成报表,package 除了继承struts-default还需要继承jfreechart-dafault,在struts.xml中配置如下:
<package name="default" extends="struts-default,jfreechart-default">
<actionname="jfreeChart" class = "cn.test.JfreeCharAction" method= "{1}">
<resultname="success" type="chart"><!—在此type必须是chart-->
<paramname="width">800</param><!—设置生成图片宽度-->
<paramname="height">400</param><!—生成图片高—>
</result>
</action>
</package>