今天闲来无事,看了点JfreeChart的中文教程。简单的柱状图。作为自己备忘。
/**
* 选项卡界面查询
* @return
* @throws Exception
*/
@Action(value = "cnindexquery", results = { @Result(location = "/page/userpercept/corenetwork/cnindexqueryMore.jsp") })
public String cnindexquery() throws Exception {
Map<String,String> dateMap=(Map<String,String>)session.get("dateMap");
//查询表
if(dateMap!=null){
//无关代码略
List<CnIndexCallCtrlData> list = ccDao.findCnIndexCallCtrlInfoByCondition(form);
String title="核心网呼叫控制";
String xName="时间范围";
String yName="呼叫占用次数";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (CnIndexCallCtrlData cnIndexCallCtrlData : list) {
dataset.addValue(cnIndexCallCtrlData.getSEIZE_COUNT(), "",
cnIndexCallCtrlData.getSTARTTIME()+"~"+cnIndexCallCtrlData.getENDTIME());
}
JFreeChart chart = ChartFactory.createBarChart3D(
title, // 图表标题
xName, // 目录轴的显示标签
yName, // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
chart=setChartCode(chart);//解决乱码
String img=createImage(chart);//生成web报表
System.out.println(img);
request.put("img", img);
}
return ConstUtil.SUCCESS;
}
/**
* 生成web报表
* @param chart
* @return
* @throws IOException
*/
public String createImage(JFreeChart chart) throws IOException{
HttpServletRequest req = (HttpServletRequest) (ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST));
String filename = ServletUtilities.saveChartAsPNG(chart, 800, 500,null, req.getSession());
ServletContext servlet = (ServletContext) (ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT));
return servlet.getContextPath() + "/servlet/DisplayChart?filename="+ filename;
}
/**
* 解决乱码问题
* @param chart
* @return
*/
public JFreeChart setChartCode(JFreeChart chart){
/*------解决了汉字乱码的问题-----------*/
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
CategoryAxis domainAxis = categoryplot.getDomainAxis();
//设置标题的文字
chart.getTitle().setFont(new Font("宋体", Font.PLAIN, 20));
//设置X轴坐标上的文字
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
//设置X 轴的标题文字
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
//设置Y 轴坐标上的文字
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
//设置Y 轴的标题文字
numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
//设置底部文字
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
return chart;
}