JFreeChart中文乱码解决方法
2016-07-17 21:42
417 查看
在使用JFreeChart的时候,经常会出现中文乱码的情况,以一个小例子来说明一下解决方式。
例子图
这是建立表的代码:
这段代码利用的是之前提供的结果集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:是否有链接
本例中:
构造结果集的代码如下:
本例是一个简单的柱状图的例子,不涉及对比,所以添加数值的工作很简单,dataset.addValue(36, series1, category1);
就是向柱体series1这个组添加一个值为36的category1。
该方法的声明返回值类型CategoryDataset是一个接口,而实际返回值类型DefaultCategoryDataset则实现了这个接口,所以声明返回值和实际返回值可以不同。
实际上,由于JFreeChart的类库版本的原因,上述代码生成的柱状图中文是无法显示的,如下图:
也就是出现了中文乱码问题,此时需要设置字体以保证中文显示。
字体设置完成以后结果如下:
关于饼状图的中文乱码问题
底部图解的中文乱码解决方案
完成之后如图:
上图的表示方法由如下语句决定:
我们还可以选择别的表示方法,只需改变StandardPieSectionLabelGenerator(“{0}”));中的参数,改方法有3个参数:{0}、{1}、{2}。参数为{0}时,是图解表示法,如上图所示。
参数为{1}的时候是绝对值表示法,如下图:
参数为{2}时是百分比表示法,但是需要注意的是,百分比表示时会四舍五入。
例子图
这是建立表的代码:
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}时是百分比表示法,但是需要注意的是,百分比表示时会四舍五入。
相关文章推荐
- 用友畅捷通高级前端笔试题(一)凭借回忆写出
- 插件式开发(四)---关于资源问题
- Java类库1(16.7.12)
- 【基础】——Servlet原理
- codeforces 527C Glass Carving
- jQuery对象与DOM对象区别及互换
- 如何得到文件长度
- 程 序制作步骤,三级联动,委托事件和Repeater灵活运用以及JS知识补充
- BZOJ4195 程序自动分析
- 链接(2)
- Git 学习指南
- 2016暑假计划
- 【数据库】数据库发展阶段
- sleep方法和wait方法的区别?
- 你不知道的jQuery Item11 -- ajax jsonp跨域方法详解
- bootstrap的基本模板
- linux文件的权限属性与操作
- 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
- 【经典算法】:链表翻转
- HTTPS双向认证原理