jfreechart在linux下的中文乱码

这两天因为要统计报表,就用到了jfreechart组件,因为是在windows下编程,所以一直都比较正常,可没想到一放到linux下就出现了乱码,所有的中文都是显示小方块,郁闷的很,然后google了下,网络上倒是有不少的解决方案,可一一试过以后发现都不行,仍旧是乱码,或许是因为环境不同导致配置无法生效,也或许是我配置有失误,总之试了很多都无法解决乱码的问题。再者网络上介绍的都是更改系统的字体,麻烦的很,而且有误操作的可能性,而且文章都比较旧了,视乎跟不上时代的节奏了。本着自我研究的精神,google了不少的方案后大致明白应该是JRE找不到指定的字体而导致的乱码,所以当然是从字体入手,首先是看看jfreechart默认是用什么字体的,查看如下代码:

 

Java代码    收藏代码
  1. System.out.println(jfreechart.getTitle().getFont().getFamily());   

 

结果输出是:

 

Java代码    收藏代码
  1. SansSerif  

 

很陌生的字体,既然这样,我们就可以设置自己想要的字体,比如设置柱状图的标题字体,可以如下代码:

 

 

Java代码    收藏代码
  1. jfreechart.getTitle().setFont(new Font("宋体", Font.BOLD, 22));  

 

其他的诸如X,Y轴的名称、刻度和类别等文字的字体也可以一并进行设置,还是以柱状图为例子,

 

Java代码    收藏代码
  1. Font font = new Font("宋体", Font.BOLD, 22);  
  2. jfreechart.getTitle().setFont(font); // 标题  
  3.   
  4. font = new Font("宋体", Font.PLAIN, 14);  
  5. jfreechart.getLegend().setItemFont(font); // 列类型的文字字体  
  6.           
  7. font = new Font("宋体", Font.PLAIN, 16);  
  8. categoryaxis.setLabelFont(font); // x轴名称的字体  
  9. categoryplot.getRangeAxis().setLabelFont(font); // y轴名称的字体  
  10.   
  11. CategoryPlot categoryplot = jfreechart.getCategoryPlot();  
  12. CategoryAxis categoryaxis = categoryplot.getDomainAxis();  
  13.   
  14. font = new Font("宋体", Font.PLAIN, 12);  
  15. categoryaxis.setTickLabelFont(font); // x轴上的刻度名称字体  
  16. categoryplot.getRangeAxis().setTickLabelFont(font); // y轴上的刻度名称字体  
  17.           
  18. font = new Font("宋体", Font.PLAIN, 18);  
  19. categoryplot.setNoDataMessage(emptyMsg);  
  20. categoryplot.setNoDataMessageFont(font); // 没有数据时的提示  

 

    这样设置完毕后,我再在linux下运行就没有乱码问题了。我的环境是:Redhat4,Jdk6,jfreechart-1.0.0(这个版本中还没有Theme的概念)。

 

    我的解决方法并没有修改linux或JRE的字体,当然前提应该还是linux下的JRE支持中文字体了,我们可以使用这个小程序来测试某个环境下JRE是否支持中文,如下:

 

Java代码    收藏代码
  1. package test;  
  2.   
  3. public class ImageTester {  
  4.     public static void generate(String fileName) throws Exception {  
  5.         BufferedImage image = new BufferedImage(300200, BufferedImage.TYPE_INT_RGB);  
  6.         Graphics g = image.getGraphics();  
  7.         String fontType = "宋体";  
  8.         g.setFont(new Font(fontType , Font.BOLD, 22));  
  9.         g.drawString("你好我好"3030);  
  10.         g.drawString("\u5b8b\u4f53"3080);  
  11.         ImageIO.write(image, "JPEG"new FileOutputStream(new File(fileName)));  
  12.     }  
  13.       
  14.     /** 
  15.     * @param args 
  16.     */  
  17.     public static void main(String[] args) throws Exception {  
  18.         generate(args[0]);  
  19.     }  
  20.   
  21. }  
  22.   
  23. linux下运行时这样运行:  
  24. java test.ImageTetser /home/test.png  

 

 

    当然了,这个解决方案不代表可以解决所有的乱码问题,而且也无法得到验证,仅仅是我在处理乱码过程中的一点心得,希望对大家有点用处:-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值