读书人

JFreeChart 之一:柱状图兑现

发布时间: 2012-10-10 13:58:11 作者: rapoo

JFreeChart 之一:柱状图实现

注: 项目使用SSH ,?jfreechart-1.0.13 版本

?

?

准备工作:

?

1:JFreeChart Jar包 ?可去官方下载JFreeChart?,此处我引用了?jcommon-1.0.16.jar , jfreechart-1.0.13.jar?

? ? ?放入WEB-INF\lib?

?

2:添加servlet 支持,打开web.xml 文件 添加以下支持

?

 <servlet>        <servlet-name>DisplayChart</servlet-name>        <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>DisplayChart</servlet-name>        <url-pattern>/servlet/DisplayChart</url-pattern>    </servlet-mapping>

?

3: 编写报表

?

? ?/* Action: */

// 从数据库中查询 需要显示的数据List list = commonService.findBySql(query);int count=0;DefaultCategoryDataset data = new DefaultCategoryDataset(); if(list!=null && list.size()>0){int len = list.size();// 组建数据for(int i=0;i<len;i++){Object[] obj = (Object[]) list.get(i);count+=new Double (obj[1].toString());data.addValue(new Double(obj[1].toString()), "", obj[0].toString()+"月");}CategoryDataset dataset = data; JFreeChart chart = ChartFactory.createBarChart3D("",year+"年","人数",dataset,PlotOrientation.VERTICAL,true,true,false);//设置字体,不然会中文乱码的 Font font = new Font("宋体", Font.BOLD, 16);  TextTitle title = new TextTitle("每月录入统计", font);  //副标题  TextTitle subtitle = new TextTitle("总人数:"+count, new Font("宋体", Font.BOLD, 12));  chart.addSubtitle(subtitle);  chart.setTitle(title); //标题//////////////////////////JFreeChartUtil.barChart3DStyle(chart);String filename = ServletUtilities.saveChartAsPNG(chart, 800, 600,null, request.getSession());     String pieUrl = request.getContextPath()+ "/servlet/DisplayChart?filename=" + filename;   request.setAttribute("chartUrl", pieUrl);

?

JFreeChartUtil ?/?barChart3DStyle

?

?

/* 柱状图样式 */public static void barChart3DStyle(JFreeChart chart) {CategoryPlot plot = chart.getCategoryPlot();NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();  CategoryAxis domainAxis = plot.getDomainAxis();   /*------设置X轴坐标上的文字-----------*/  // domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));   domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 11)); /*------设置X轴的标题文字------------*/   domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));   /*------设置Y轴坐标上的文字-----------*/  // numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));   numberaxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));   /*------设置Y轴的标题文字------------*/   numberaxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));   /*------这句代码解决了底部汉字乱码的问题-----------*/   chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));//设置网格背景颜色plot.setBackgroundPaint(Color.white);//设置网格竖线颜色plot.setDomainGridlinePaint(Color.pink);//设置网格横线颜色plot.setRangeGridlinePaint(Color.pink);//显示每个柱的数值,并修改该数值的字体属性BarRenderer3D renderer = new BarRenderer3D();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);//设置 底部分类 不显示renderer.setBaseSeriesVisibleInLegend(false);//默认的数字显示在柱子中,通过如下两句可调整数字的显示//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));renderer.setItemLabelAnchorOffset(10D);renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));renderer.setItemLabelsVisible(true);//设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.3);plot.setRenderer(renderer);//设置地区、销量的显示位置//将下方的“年”放到上方//plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);//将默认放在左边的“人数”放到右方//plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);}
?

?

JSP?

<img src="${chartUrl}" mce_src="${chartUrl}" />

?

??
JFreeChart 之一:柱状图兑现

读书人网 >编程

热点推荐