JfreeChart 报表 柱状图
今天闲来无事,看了点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;}