JFreeChart中文乱码解决方法

来源:互联网 发布:linux 安装ant 编辑:程序博客网 时间:2024/05/16 00:59

在使用JFreeChart的时候,经常会出现中文乱码的情况,以一个小例子来说明一下解决方式。
例子图
这里写图片描述
这是建立表的代码:

private static JFreeChart createChart(CategoryDataset dataset){        JFreeChart chart=ChartFactory.createBarChart("全球 WCDMA产业联盟成员构成情况",                                                                                                              "成员",                                                                                                              "数量",                                                                                                               dataset,                                                                                                               PlotOrientation.VERTICAL,                                                                                                               false,true,false);        chart.setBackgroundPaint(Color.WHITE);        CategoryPlot plot=(CategoryPlot)chart.getPlot();        plot.setBackgroundPaint(Color.BLACK);        CategoryItemRenderer renderer=plot.getRenderer();        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());        renderer.setSeriesItemLabelsVisible(0, Boolean.TRUE);        //柱体外观        BarRenderer barrenderer=(BarRenderer)plot.getRenderer();        barrenderer.setDrawBarOutline(true);        barrenderer.setOutlinePaint(Color.BLACK);        barrenderer.setMaximumBarWidth(0.05);        barrenderer.setSeriesPaint(0, Color.blue);        //设置柱体范围轴轴和柱体数值轴        NumberAxis rangeAxis=(NumberAxis)plot.getRangeAxis();        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());        rangeAxis.setUpperMargin(0.15);        CategoryAxis domainAxis=plot.getDomainAxis();        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);        return chart;    }

这段代码利用的是之前提供的结果集dataset创建一个JFreeChart对象,在JFreeChart中,所有的图形报表都可以抽象为一个JFreeChart对象,要创建这个对象,就要使用内置抽象类ChartFactory,该类提供了一系列创建标准图形报表的基础方法,本例用到的createBarChart方法,默认采用CategoryPlot进行绘图,CategoryAxis作为柱体域的轴,NumberAxis作为柱体的数值范围轴,BarRenderer渲染主体的图形。其函数原型为:
public static JFreeChart createBarChart(java.lang.String title,
java.lang.String categoryAxisLabel,
java.lang.String valueAisLabel,
CategoryDataset dataset,
PlotOrientation orientation,
boolean leagend,
boolean tooltips,
boolean urls )
这个方法的属性含义如下:
title 报表标题
categoryAxisLabel:柱体排列轴标签,也就是竖直柱体图的x轴的标签
valueAxisLabel:柱体数值范围轴标签,也就是竖直柱体图的x轴的标签
dataset:要展示的结果集
orientation:柱体的方向,可以选择垂直或水平
leagend :是否显示图例
tooltips:是否有工具条提示
urls:是否有链接
本例中:
这里写图片描述
构造结果集的代码如下:

private static CategoryDataset createDataset(){        String series1="联盟成员";        String category1="制造商";        String category2="运营商";        String categroy3="管制者";        String categroy4="其他";        DefaultCategoryDataset dataset=new DefaultCategoryDataset();        dataset.addValue(36, series1, category1);        dataset.addValue(37, series1, category2);        dataset.addValue(13, series1, categroy3);        dataset.addValue(25, series1, categroy4);        return dataset;

本例是一个简单的柱状图的例子,不涉及对比,所以添加数值的工作很简单,dataset.addValue(36, series1, category1);
就是向柱体series1这个组添加一个值为36的category1。
该方法的声明返回值类型CategoryDataset是一个接口,而实际返回值类型DefaultCategoryDataset则实现了这个接口,所以声明返回值和实际返回值可以不同。
实际上,由于JFreeChart的类库版本的原因,上述代码生成的柱状图中文是无法显示的,如下图:
这里写图片描述
也就是出现了中文乱码问题,此时需要设置字体以保证中文显示。
这里写图片描述
这里写图片描述
字体设置完成以后结果如下:
这里写图片描述
关于饼状图的中文乱码问题
这里写图片描述
底部图解的中文乱码解决方案

chart.getLegend().setItemFont(new Font("微软雅黑",Font.BOLD,12));饼图上的中文乱码问题解决方案PiePlot pieplot = (PiePlot)chart.getPlot(); pieplot.setLabelFont(new Font("微软雅黑",Font.BOLD,12));

完成之后如图:
这里写图片描述
上图的表示方法由如下语句决定:

PiePlot plot=(PiePlot)chart.getPlot();plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}"));

我们还可以选择别的表示方法,只需改变StandardPieSectionLabelGenerator(“{0}”));中的参数,改方法有3个参数:{0}、{1}、{2}。参数为{0}时,是图解表示法,如上图所示。
参数为{1}的时候是绝对值表示法,如下图:

这里写图片描述

参数为{2}时是百分比表示法,但是需要注意的是,百分比表示时会四舍五入。

这里写图片描述

0 0
原创粉丝点击