Jfreechart 乱码

整个图标分成三部分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. /*------设置X轴坐标上的文字-----------*/
  6. domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN,
    11));   
  7. /*------设置X轴的标题文字------------*/
  8. domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));

  9. /*------设置Y轴坐标上的文字-----------*/
  10. numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN,
    12));   
  11. /*------设置Y轴的标题文字------------*/
  12. numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));

  13. /*------这句代码解决了底部汉字乱码的问题-----------*/
  14. 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字体的地方都替换成中文字体在重新编译,来个一劳永逸,我没有试,不知可不可以,我主要采用了重新设置字体的方法。

Jfreechart 乱码,布布扣,bubuko.com

时间: 2024-12-29 23:05:38

Jfreechart 乱码的相关文章

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

一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库提供...... 一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉,原因是jfreechart的在linux系统中需要访问java awt库提供的图形功能,而linux下的绝大多数版本的java awt类库都需要x serv

jfreechart在Linux上出现乱码,小方块解决方案

window环境下出现乱码可能是jfreechart类库版本高.在Linux出现小方块乱码解决方式. 原因: jre缺少中文字库1.以root用户登录到系统,切换到jdk_home/jre/ lib/fonts目录下执行 mkdir fallback 新建一   个目录:2.把simsun.ttc 上传到fallback目录,执行 cp simsun.ttc simsun.ttf 复制一份: 点击simsun.ttc下载地址:http://files.cnblogs.com/jiabaode/s

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

一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库提供的图形功能,而linux下的绝大多数版本的java awt类库都需要x server提供的一些功能.而基本上作服务器的系统都没有启动x server(甚至根本没安装). 报错如下: X connection to localhost:11.0 broken (explicit kill or s

jFreeChart中文显示成乱码

jfreechart中文显示成方块 statsvn+statcvs都是使用的jfreechart 1.0.13,生成的图表中文显示有问题.老版本 jfreechart1.0.10就是好的-擦- 原来,从1.0.14开始,加了个 source\org\jfree\chart\StandardChartTheme.java 里边写死字体都用 Tahoma , 没找到这个字体, 生成的图中,中文就变成方块了. 解决办法: 要么在机器上安装Tahoma字体,要么修改代码,将字体该回去. 将 新采用的Ta

jfreechart和springMVC+maven整合

高校的项目中一个功能是对统计的成绩进行图表分析,查找了一些资料之后感觉jfreechar上手挺快的,简单的做了几个demo也都很好实现,也能够满足项目中的需求,所以就决定使用这个工具.这里就将学习到的一些关于jfreechar的知识整理一下. 1.    引入jar包 使用这个工具一定要将他的包引入的到项目,在高校的项目中使采用maven管理这些外部文件的,所以对于引入jar包这一步就变得特别简单了,只要在maven项目的pom.xml文件中添加jfreechar的依赖就可以(maven会自动在

JFreeChart与AJAX+JSON+ECharts两种处理方式生成热词统计可视化图表

本篇的思想:对HDFS获取的数据进行两种不同的可视化图表处理方式.第一种JFreeChar可视化处理生成图片文件查看.第二种AJAX+JSON+ECharts实现可视化图表,并呈现于浏览器上.   对此,给出代码示例,通过网络爬虫技术,将上传到HDFS的新浪网新闻信息实现热词统计功能,通过图表的柱状图来显示出来. ------> 目录: 1.JFreeChart可视化处理(生成本地图片) [1]HDFS文件读取 [2]JDFreeChart库应用 2.AJAX+JSON+EChart生成可视化图

jfreechart的使用案例

一:下载需要的2个jar文件 jcommon-版本号.jar,jfreechart-版本号.jar,注意版本不要太高. 实例一:比较简单的application版本的饼图 1 /** 2 * 3 */ 4 package com.hlcui.jfreechart; 5 6 import java.awt.Font; 7 8 import org.jfree.chart.ChartFactory; 9 import org.jfree.chart.ChartFrame; 10 import org

JFreeChart入学教程

JFreeChart入学教程 2011-08-08 14:55:19|  分类: 技术篇 |举报 |字号 订阅 JFreeChart 是一组功能强大.灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图.饼图.曲线图.甘特图等.它能够用在Swing和Web等 中制作自定义的图表或报表,并且得到广泛的应用.本文将通过引领读者学习在JFreeChart中饼图.柱状图和曲线图的进阶应用,来达到熟练使用 JFreeChart的目的. 一.下载与环境配置 1. 下载JFreeChart

freemarker+Jfreechart生成Word文档(含图片)

这几天再弄一个报表,要统计一些信息最终的部分展示结果如下: 基本工具freemarker,jfreechart 工程的部分结构如下 与生成Word有关的类主要有FreemarkerConfiguration和WordGenerator代码如下: import com.bqs.ares.common.utils.CommonUtils; import freemarker.template.Configuration; import java.io.File; import org.slf4j.L