`
chengyue2007
  • 浏览: 1490262 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JFreeChart乱码解决方法

    博客分类:
  • java
阅读更多

整个图标分成三部分chart   title,chart 的plot还有chart的   legend三个部分需要对他们分别设置字体就对了。

先看解决方法( 把这几个全部设置了,都搞定了就可以了):

标题乱码

   chart.getTitle().setFont(new Font("宋体", Font.BOLD,12));

其他

  1. CategoryAxis domainAxis = plot.getDomainAxis();  
  2. // NumberAxis  valueAxis=(NumberAxis) plot.getRangeAxis(); 
  3. //有人说这个是水平方向设置的 方法。
  4. ValueAxis numberaxis = plot.getRangeAxis();
  5.   
  6. /*------设置X轴坐标上的文字-----------*/  
  7. domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));   
  8.   
  9. /*------设置X轴的标题文字------------*/  
  10. domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));   
  11.   
  12. /*------设置Y轴坐标上的文字-----------*/  
  13. numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));   
  14.   
  15. /*------设置Y轴的标题文字------------*/  
  16. numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));   
  17.   
  18. /*------这句代码解决了底部汉字乱码的问题-----------*/  
  19. jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));  

对于曲线图;

用于下面两种方法得到的来设置设置水平的和垂直的方法是不一样的。

JFreeChart chart = ChartFactory.createTimeSeriesChart("", "时间", "价格", lineDataset, true, true, true);

 

XYPlot plot = (XYPlot) chart.getPlot();  

 垂直的:

ValueAxis valueaxis=plot.getDomainAxis();
valueaxis.setLabelFont(new Font("宋体",Font.BOLD,12));
valueaxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));

水平的:

NumberAxis  valueAxis=(NumberAxis) plot.getRangeAxis();
 valueAxis.setLabelFont(new Font("宋体",Font.BOLD,12));
 

 

 

JFreeChart jfreechart = ChartFactory.createLineChart("‘大豆’别按小时计算拆线图", "时间", "价格", categoryDataset,PlotOrientation.VERTICAL, true, false,false);

 

CategoryPlot plot = (CategoryPlot) jfreechart.getPlot();

 

 CategoryAxis domainaxis=plot.getDomainAxis();
   水平的:
 domainaxis.setLabelFont(new Font("宋体",Font.BOLD,20));
 
 domainaxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));

垂直的:

NumberAxis  valueAxis=(NumberAxis) plot.getRangeAxis();
 
 valueAxis.setLabelFont(new Font("宋体",Font.BOLD,20));

 

 

 

上面的是针对柱状图的,下面的是 设置饼状图的

标题:chart.setTitle(new TextTitle("我的标题",new Font("宋体",Font.BOLD,20)));
    
图例: LegendTitle legendtitle=chart.getLegend(0); 
   legendtitle.setItemFont(new Font("我的标题",Font.ITALIC,20));
    

饼上面的文字:

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

原因:

jfreechart主要是用来动态产生各种数据图形的,可最初使用的时候大都会碰到图片中的中文乱码或是一个小方块的情况。


仔细研究主要有以下2种原因:

1:服务器缺少中文字体,这多发生在Hp等unix操作系统上,解决的方法就是下载可用字体库到系统中,
有人也提出在Windows上产生图片在传回到Unix主机上的方法。
2:软件版本问题,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));
这里需要注意的是,哪里出现了乱码就修改哪里的字体,将字体转换为系统有的就可以了。
另外有人提出将jfreechart源文件里面的涉及到SansSerif字体的地方都替换成中文字体在重新编译,来个一劳永逸,我没有试,不知可不可以,我主要采用了重新设置字体的方法。

 

 

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kinble/archive/2009/05/06/4155085.aspx

  • 大小: 11.9 KB
  • 大小: 38.5 KB
分享到:
评论
2 楼 action1949 2015-03-19  
好东西,解决问题
1 楼 蚂蚁路过 2012-07-07  
,好用~~感谢分享

相关推荐

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

    绝对物超所值! JFreeChart-1.0.13原文件含jar包。 1、JFreeChart生成图片路径教程 2、JFreeChart使用教程(含下载安装,超详细...5、JFreeChart乱码解决方法 等等 包括csdn上得优秀案例 ------20+M的数据不要别后悔哦

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

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

    Jfreechart 中文乱码解决方法

    Jfreechart 中文乱码的解决方法,网上共享的资源

    JFreeChart乱码解决.doc

    解决JFreeChart中文乱码的方法通常涉及以下几个步骤: 1. **设置页面编码**:确保你的JSP或HTML页面以正确的字符集(如UTF-8)进行编码。例如,在JSP文件中,你可以使用`contentType`指令设置页面编码,如`;charset...

    jfreechart中文乱码问题解决方案

    下面将详细阐述如何解决JFreeChart中文乱码问题,并提供不同图表类型的具体配置示例。 1. **柱状图(CategoryPlot)**:在柱状图中,我们需要设置`CategoryPlot`的`domainAxis`和`rangeAxis`的字体,以及图例的字体。...

    jfreechart乱码问题

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

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

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

    jfreechart linux乱码解决方案

    通过以上步骤,你应该能够在Linux环境中成功解决JFreeChart的中文乱码问题。记住,关键在于正确配置字体和确保Java能够找到并使用这些字体。在实际开发过程中,根据具体环境和需求,可能需要进行一些额外的调整。

    jfreechart形成报表文字乱码解决

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

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

    这个文件可以用来解决JFreeChart在Linux下显示中文乱码的问题。 解决步骤如下: 1. **安装字体**:首先,你需要将“simsun.ttc”字体文件安装到你的Linux系统中。这通常涉及到将字体文件复制到系统的字体目录...

    jfreechart乱码(linux下)

    在Linux环境下,JFreeChart库可能会...通过逐一排查并修正这些点,通常能够成功解决Linux环境下的JFreeChart乱码问题。如果提供的压缩包文件包含了示例代码或配置文件,那么可以根据这些文件进一步分析和调试具体问题。

    jfreechart部署linux服务器生成图片乱码解决方案

    标题 "jfreechart部署在Linux服务器上生成图片乱码的解决方案" 涉及到的主要知识点是关于Java图形库JFreeChart在Linux环境中的使用,特别是解决中文字符乱码的问题。JFreeChart是一个广泛使用的开源Java库,它允许...

    解决jfreechart中文乱码方案整理.doc

    解决JFreeChart中文乱码的方法主要集中在字体的配置和编码的处理两个方面。 #### 字体配置 字体配置是解决中文乱码最基本也是最有效的方法之一。 1. **使用系统字体** - 在Java环境中指定使用系统中已安装的支持...

    linux 下 JFreeChart 乱码 JDK字符集

    通过上述方法,你可以解决在Linux下使用JFreeChart时遇到的中文乱码问题。确保正确配置字符集,选用支持中文的字体,并调整系统字体配置,以确保图表中的中文能够正常显示。在实际应用中,可能还需要根据具体环境...

    JFreeChart中文乱码问题解决

    通过上述方法,可以有效地解决JFreeChart中的中文乱码问题,从而使得图表在包含中文标签时也能正确显示。此外,开发者还应该注意字体的选择和配置,以及编码问题,以确保图表能够在不同的环境中稳定运行。

    JFreeChart无中文乱码版本

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

    解决jfreechart中文乱码

    在使用Java的JFreeChart库绘制包含中文字符的图表...通过以上方法,可以有效地解决jfreechart在显示中文时出现的乱码问题。在实际开发中,根据具体需求和环境进行适当调整,确保中文字符在图表中得到清晰、正确的显示。

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

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

Global site tag (gtag.js) - Google Analytics