`

JFreeChart新版本乱码内幕

阅读更多
软件版本问题,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无中文乱码版本

    这个特定的版本,被称为“JFreeChart无中文乱码版本”,特别优化了解决在处理中文字符时可能出现的乱码问题,使得在中文环境下使用JFreeChart变得更加友好。 JFreeChart支持多种类型的图表,包括但不限于柱状图、...

    jfreechart最新版本

    同时,新版本可能修复了一些已知的问题,提高了图表渲染的准确性和效率。 使用JFreeChart的基本流程包括以下几个步骤: 1. 创建ChartFactory:首先,你需要选择一个合适的图表类型,并使用对应的ChartFactory方法来...

    jfreechart-1.0.13中文乱码,数值显示等问题

    在JFreeChart的早期版本中,由于默认的字体集可能不支持中文字符,因此在处理包含中文的数据时,可能会出现乱码现象。为了解决这个问题,我们需要采取以下步骤: 1. 设置合适的字体:JFreeChart允许我们自定义图表...

    jfreechart最新版本的Demo1.0.14

    喜欢的拿去,有java环境的可以直接运行,java环境不用我在这里讲了吧。

    Linux下JFreechart中文乱码的解决.docx

    Linux下JFreechart中文乱码的解决.docx

    jfreechart-1.0.8a 最新版本

    这个1.0.8a 版本是最新的更新,提供了改进的性能、新特性以及对先前版本的修复。在这一版本中,用户可以期待更稳定和功能丰富的体验。 **源码分析** JFreeChart 的源码是完全开放的,这为开发者提供了深入理解图表...

    JFreeChart乱码解决方法

    JFreeChart乱码解决方法 - 企业应用 - Java

    jfreechart形成报表文字乱码解决

    解决JFreeChart乱码问题的基本思路是修改图表的各个组成部分(如标题、坐标轴、图例等)的字体设置,确保它们使用支持中文的字体。以下是一些关键的类和接口,以及如何使用它们来解决乱码问题: 1. **数据源...

    linux下JFreeChart生成的图片乱码,可以用这个字体

    在Linux环境下,使用Java的JFreeChart库生成图表时,可能会遇到一个问题,即图表中的文本出现乱码。这是因为JFreeChart默认使用的字体可能在Linux系统中不被支持,或者编码设置不正确。解决这个问题的关键在于引入...

    jfreechart中文乱码问题解决方案

    在使用JFreeChart库生成图表时,可能会遇到中文乱码的问题,这主要是因为JFreeChart默认的字体不支持中文显示。解决这个问题的关键在于为图表的各个部分(如标题、轴标签、图例等)设置合适的中文支持字体。下面将...

    最新版本jfreechart(包括API和jar包)

    标题和描述中的"最新版本jfreechart(包括API和jar包)"指的是这个压缩包包含JFreeChart的最新稳定版本1.0.13,以及相关的API文档和可执行的jar包。 JFreeChart的核心功能在于生成各种类型的图表,如柱状图、饼图、...

    jfreechart linux乱码解决方案

    在Linux环境下,使用JFreeChart库进行图表生成时,可能会遇到中文乱码的问题。这是因为JFreeChart默认使用的是西方字符集,不支持中文显示。本文将深入探讨如何解决这一问题,确保在Linux系统中,JFreeChart能正确地...

    JFreechart 在linux下不显示及中文乱码问题

    标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...

    zysong.ttf jfreechart 解决中文乱码 问题

    这是一款专为Linux设计的中文字体,包含了大量汉字,可以有效地解决JFreeChart在Linux环境下的中文乱码问题。将“zysong.ttf”字体文件添加到系统中,可以让JFreeChart在绘制图表时能够正确渲染中文字符。 在Java...

    Linux下的JFreeChart中文乱码口口解决

    在Linux环境下使用JFreeChart库绘制图表时,可能会遇到中文乱码的问题。JFreeChart是一个强大的Java库,它提供了一套完整的解决方案来创建各种图表,如饼图、柱状图、线图等。然而,由于编码问题,当图表中包含中文...

    JFreeChart最新版

    JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件、Web应用程序或Applets中轻松创建高质量的图表。这个"JFreeChart最新版"压缩包包含了库的核心文件、源代码以及两本中文使用教程,为Java开发...

    JFreeChart 详细中文教程 案例 中文API 乱码解决方法

    JFreeChart-1.0.13原文件含jar包。 1、JFreeChart生成图片路径教程 2、JFreeChart使用教程(含下载安装,超详细) 3、JFreeChart使用详细教程 ...5、JFreeChart乱码解决方法 等等 包括许多优秀案例

    jfreechart Linux服务器图片中文乱码解决方案(亲测,已解决多台服务器)

    通过以上步骤,你应该能够成功解决JFreeChart在Linux服务器上生成图片时的中文乱码问题。值得注意的是,这种方法不仅适用于JFreeChart,还适用于其他依赖于Java运行环境显示中文字符的程序。在实际操作中,应根据...

    jfreechart乱码问题

    ### jfreechart乱码问题详解 #### 一、问题背景 在使用jFreeChart进行图表绘制时,可能会遇到中文乱码的问题。这个问题主要是由于jFreeChart默认使用的字体不支持中文字符,导致在图表中显示的中文无法正常识别,...

    jfreechart在LINUX下乱码问题的解决

    标题中的“jfreechart在LINUX下乱码问题的解决”指的是在Linux操作系统中使用JFreeChart库时遇到的字符编码问题。JFreeChart是一个Java库,用于创建各种图表,如饼图、柱状图、线图等。在处理中文字符时,如果系统...

Global site tag (gtag.js) - Google Analytics