文档章节

目前能够找到的最有效的 JFreeChart 中文乱码解决方案

苗哥
 苗哥
发布于 2013/09/06 10:09
字数 949
阅读 2781
收藏 7

由于JFreeChart组件的版本、操作平台、JDK 的设置等因素,在使用 JFreeChart 组件时可能会出现中文乱码的现象。遇到此问题时,可通过设置文字的字体来解决问题。在此提供以下两种解决此问题的方法。

一、设置主题的样式(强烈推荐)

在创建统计图表之前,创建主题样式并指定样式中的字体,通过 ChartFactory 类的 setChartTheme() 方法设置主题样式,这种方式在目前已知的所有版本的 JFreeChart 中均可使用,效果相当不错,我找了好久才找到,而且我觉得这应该是解决中文字体显示为方块的比较标准的方法之壹。

//创建主题样式
StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
//设置标题字体
standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
//设置图例的字体
standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
//设置轴向的字体
standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
//应用主题样式
ChartFactory.setChartTheme(standardChartTheme);
//生成统计图
JFreeChart chart=ChartFactory.createBarChart3D("水果产量图", "水果", "水果", dataset, PlotOrientation.VERTICAL, true, true, true);


二、指定乱码文字的字体(仅对旧版本有效)

使用JFreeChart绘制图表的时候,如果使用默认的字体,通常会导致图标中的汉字显示为乱码。解决方法如下:JFreeChart 是用户使用该库提供的各类图标的统一接口,而它主要由三个部分构成:Title(标题),Legend(图例),Plot(图表主体)。因此对乱码文字的处理转化为分别对这三个部分的字体进行处理,设置方法分别如下:

1、设置 Title 的字体,直接获取 Title 的内容并设置其字体为中文字体的某种格式即可。

TextTitle textTitle = freeChart.getTitle();
textTitle.setFont(new Font("宋体", Font.BOLD, 20));
2、设置 Legend 的字体,直接获取其引用并设置字体样式。
LegendTitle legend = freeChart.getLegend();
if (legend != null) {
	legend.setItemFont(new Font("宋体", Font.BOLD, 20));
}


3、设置 Plot 的字体,先获取 Plot 的 X 轴和 Y 轴对象的引用,然后分别设置其字体样式。对于不同类型的图表对应 Plot 的不同的实现类,设置字体的方法也不完全相同。以下以柱状图的设置为例进行说明:

CategoryPlot plot = (CategoryPlot)freeChart.getPlot();
//获取柱状图的 X 轴
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,20));//设置x轴坐标上的字体
domainAxis.setLabelFont(new Font("宋体",Font.BOLD,20));//设置x轴上的标题的字体
//获取柱状图的 Y 轴
ValueAxis valueAxis = plot.getRangeAxis();
valueAxis.setTickLabelFont(new Font("宋体",Font.BOLD,20));//设置y轴坐标上的字体
valueAxis.setLabelFont(new Font("宋体",Font.BOLD,20));//设置y轴坐标上的标题的字体

另外特别要提出来的是,网上有很多关于设置 Plot 的 X 轴与 Y 轴字体的文章,用的就是上面的方法,但是很遗憾,我在尝试的过程中发现这個方法并不奏效,如果强行使用下面的方法,要么就是无法在 API 中找到对应的方法名称,要么就是在获取 Plot 引用的时候提示 ClassCastException(更具体的原因是 XYPlot 类型无法转化为 CategoryPlot 类型),因为我使用的是当前 JFreeChart 的最新版本1.0.15,所以我初步分析是 JFreeChart 的开发人员在最新版的开发包中将这几個方法的声明去掉了,在旧版本的 JFreeChart 中以上方法也许是可行的,不过我没有测试过,如果有谁用过 JFreeChart 比较早期的版本,可以在本文下方留言,共同讨论提高。

对于使用PiePlot的图标,如饼状图,通常按照如下方式进行设置:

PiePlot plot = (PiePlot)freeChart.getPlot();
plot.setLabelFont(new Font("宋体", Font.BOLD, 15));

本文转载自:http://developer.51cto.com/art/201112/308902.htm

共有 人打赏支持
苗哥

苗哥

粉丝 245
博文 110
码字总数 130745
作品 0
上海
后端工程师
私信 提问
Linux下的JFreeChart和 汉字验证码 中文乱码问题解决方案

原因:首先,JFreeChart和中文验证码的乱码问题和jsp的编码无关,是由于Java虚拟机找不到字体文件造成的,所以同类的Swing或者AWT的中文乱码问题也适用 环境:首先,JFreeChart和中文验证码的乱码...

山哥
2012/02/09
0
0
Struts 中结合 JFreeChart,iText 生成 PDF 报表

本文中向读者朋友提供了一种 PDF 报表系统的解决方案,并将重点放在如何整合开源框架以实现系统要求,以及如何解决实际开发过程中的疑难问题上,对于广大的开源框架爱好者和开发人员具有一定...

红薯
2011/02/11
2.7K
5
ChartDirector破解及中文问题解决

ChartDir是一个比Jfreechart还要好的图表工具包,但要收费. ChartDir Project home: http://www.advsofteng.com/ 下一个来试验吧 http://download2.advsofteng.com/chartdir_java.war ------......

红薯
2009/03/06
13.1K
1
JfreeChart使用经验总结(分析了使用中碰到的一些常见问题)

jfreechart使用经验总结(针对版本:jfreechart-1.0.0-pre2.zip) 问题一:在每次生成jfreechar图片的时候都会抛出异常,异常指出问题出在ChartFactory.createXYLineChart(picName, "时间轴", ...

梦想生活
2013/03/07
0
0
jfreechart在linux下中文乱码

jfreechart在Ubuntu Server下,生成的图片中文乱码,谁遇到过?

Hartwell
2012/06/28
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

linux在线安装JDK(1.8版本)

linux在线安装JDK(1.8版本) 2018年07月03日 15:36:27 唯爱酒神 阅读数:806 标签: linux jdk安装 jdk安装 更多 个人分类: linux 在线下载JDK 命令: wget --no-check-certificate --no-c...

rootliu
23分钟前
0
0
移植Modbus到STM32F103(2):移植FreeModbus到usart3并运行示例代码

FreeModbus是Modbus的一个被广泛移植的实现。其源码在github,最新版是1.6。 FreeModbus支持Modbus功能码里的0x01~0x06,0x0F~0x11和0x17,对一些功能比如异常诊断和读事件计数等功能码并没有...

Konstantine
今天
3
0
浅谈神经网络(神经网络篇)

背景 之前写过浅谈神经网络基础篇,简单介绍下机器学习这块内容,用于扫盲。本文正式将神经网络,这部分是深度学习的基础。了解完可以掌握强大的机器学习的方法,也可以更好的了解深度学习。...

Uknowzheng
今天
5
0
移动硬盘变为RAW格式后的修复

在Mac上使用自己的移动硬盘结果文件系统格式变为RAW; 在自己windows笔记本上使用chkdsk H: /F进行修复,修复日志如下: C:\Users\mengzhang6>chkdsk H: /F文件系统的类型是 NTFS。卷标是 do...

晨猫
今天
4
0
10 Git —— 标签管理

10 Git —— 标签管理 本节内容: 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;命令git......

lwenhao
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部