您的位置:首页 > 其它

JFreeChart中文乱码解决方法

2016-07-17 21:42 417 查看
在使用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}时是百分比表示法,但是需要注意的是,百分比表示时会四舍五入。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: