软件版本问题,jfreechart-1.0.10有人说没有问题,但jfreechart-1.0.11到13都有问题,我用的最新的jfreechart-1.0.13不做设置是有问题的。
究其原因,是它代码的内部设置的字体有问题.
先来跟踪一下它的代码:
JFreeChart chart = ChartFactory.createBarChart(
"数据统计图",
"设备号",
"积累值",
dataset,
PlotOrientation.VERTICAL,
true, true, false
);
它的原型
public static JFreeChart createBarChart(String title,
String categoryAxisLabel,
String valueAxisLabel,
CategoryDataset dataset,
PlotOrientation orientation,
boolean legend,
boolean tooltips,
boolean urls) {
上面的原型又调用了
JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT,
plot, legend);
currentTheme.apply(chart);
看看缺省字体的定义:
public static final Font DEFAULT_TITLE_FONT
= new Font("SansSerif", Font.BOLD, 18);
看看当前主题currentTheme是什么
private static ChartTheme currentTheme = new StandardChartTheme("JFree");
看它的原型定义
public StandardChartTheme(String name) {
if (name == null) {
throw new IllegalArgumentException("Null 'name' argument.");
}
this.name = name;
this.extraLargeFont = new Font("Tahoma", Font.BOLD, 20);
this.largeFont = new Font("Tahoma", Font.BOLD, 14);
this.regularFont = new Font("Tahoma", Font.PLAIN, 12);
this.smallFont = new Font("Tahoma", Font.PLAIN, 10);
……
看到了吧,默认的标题字体是SansSerif,在很多中文系统中是没有这种字体的,这可能是用老外开发开源产品的弊端吧。
首先说标题的乱码吧:
public JFreeChart(String title, Font titleFont, Plot plot,
boolean createLegend) {
……
对标题设置的代码:
if (title != null) {
if (titleFont == null) {
titleFont = DEFAULT_TITLE_FONT;
}
this.title = new TextTitle(title, titleFont);
this.title.addChangeListener(this);
}
它使用了默认字体,因此要解决这个问题只要,对标题重新设置字体就可以了。
……
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
图例和其它乱码一样处理,更换字体。
CategoryPlot plot = chart.getCategoryPlot();//获得图表区域对象
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setVisible(true);
plot.setDomainAxis(domainAxis);
ValueAxis rAxis = plot.getRangeAxis();
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,15));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,15));
/*------设置Y轴坐标上的文字-----------*/
rAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,15));
/*------设置Y轴的标题文字------------*/
rAxis.setLabelFont(new Font("黑体",Font.PLAIN,15));
这里需要注意的是,哪里出现了乱码就修改哪里的字体,将字体转换为系统有的就可以了.
上 边 是 柱 状 图 , 以 下 为 饼 图
//定义字体格式
Font font = new Font("微软雅黑", Font.CENTER_BASELINE, 12);
//定义图片标题
TextTitle title = new TextTitle("Pie状图");
//设置标题的格式
title.setFont(font);
//把标题设置到图片里面
jfreechart.setTitle(title);
//设置字体,非常关键不然会出现乱码的,下方的字体
jfreechart.getLegend().setItemFont(font);
//Pie图的字体
piePlot.setLabelFont(font);
1. CategoryAxis domainAxis = plot.getDomainAxis();
2.
3. // NumberAxis valueAxis=(NumberAxis) plot.getRangeAxis();
4. //有人说这个是水平方向设置的 方法。
5. ValueAxis numberaxis = plot.getRangeAxis();
6.
7. /*------设置X轴坐标上的文字-----------*/
8. domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
9.
10. /*------设置X轴的标题文字------------*/
11. domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
12.
13. /*------设置Y轴坐标上的文字-----------*/
14. numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
15.
16. /*------设置Y轴的标题文字------------*/
17. numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
18.
19. /*------这句代码解决了底部汉字乱码的问题-----------*/
20. jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
分享到:
相关推荐
JFreeChart用于制表,将数据转化为表格,这个版本不会有中文乱码,推荐
喜欢的拿去,有java环境的可以直接运行,java环境不用我在这里讲了吧。
自己将jfreechart常用的、柱状图、折线图、饼状图(二维的和三维的)对官网的dome进行了封装和加强,解决了高版本中文乱码问题,数值显示问题、及怎么显示百分比
Linux下JFreechart中文乱码的解决.docx
jfreechart-1.0.8a最新版本,包括源码,相关lib以及demo
jfreechart中文乱码问题解决方案
zysong.ttf jfreechart 解决中文乱码 问题.zysong.ttf LInux字体库 .用于解决jfreechart在linux环境中的中文乱码问题
JFreeChart乱码解决方法 - 企业应用 - Java
jfreechart生成报表会有乱码问题,这是解决报表乱码的,很好用
jfreechart 乱码 问题 jfreechart乱码问题
最新版本jfreechart(包括API和jar包)
解决linux 下,jfreechart乱码
jfreechart linux乱码解决方案,比较完整。
解决jfreechart中文乱码方案整 解决jfreechart中文乱码方案整
终极解决方案最简单,最直接的,已解决多台服务器java程序应用jfreechart生成图片,中文乱码问题
JFreeChart-1.0.13原文件含jar包。 1、JFreeChart生成图片路径教程 2、JFreeChart使用教程(含下载安装,超详细) 3、JFreeChart使用详细教程 ...5、JFreeChart乱码解决方法 等等 包括许多优秀案例
JFreeChart java 类实现无乱码的柱状图和饼状图实例,同时显示在jsp界面中的方法
JFreeChart 中文乱码 解决方案J FreeChart 中文乱码 解决方案
Jfreechart 中文乱码的解决方法,网上共享的资源
JFreeChart打包:JFreeChart.jar库文件,源代码,2本中文使用教程