解决JFreeChart无法正常显示中文问题

2009-10-12 23:15

解决JFreeChart无法正常显示中文问题

刚接触JFreeChart这个图形报表工具包,写了一个JAVA应用程序,打算利用JFreeChart强大的图形生成功能生成一个简单的饼图,发现JAVA图形界面上却无法正常显示中文,中文显示的都是一个一个的小方框。

package org.test.jfreechart;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class JFreeChartTest {

/**
* @param args
*/
public static void main(String[] args) {
   DefaultPieDataset dpt = new DefaultPieDataset();
   dpt.setValue("教务处", 25);
   dpt.setValue("党工部",50);
   dpt.setValue("学工部", 200);
   dpt.setValue("后勤管理部", 300);
   dpt.setValue("基组建设", 40);
   dpt.setValue("指标监督", 10);
  
  
   JFreeChart jfree = ChartFactory.createPieChart("某公司人员组织结构图",dpt,true,true,false);
   ChartFrame cf = new ChartFrame("某学校人员组织结构图",jfree);
   cf.pack();
   cf.setVisible(true);

}

}

显示效果如下:


除了标题的中文能正常显示以外,其它的都显示为方格。奇怪的是为什么标题跟链接的中文都能正常显示,为什么用到ChartFrame上就不能正常显示了呢?ChartFrame继承自javax.swing.JFrame.也就是在JFrame上显示中文有问题。

Class ChartFrame

java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame org.jfree.chart.ChartFrame

在网上查了下有些用swing比较熟练的朋友的解决办法,就是改变font字体:

Font ft = new Font("SimSun", 10, 10);
CategoryPlot categoryplot = null;
TextTitle txtTitle = null;
LegendTitle legend = null;
txtTitle = jfreechart.getTitle();
legend = jfreechart.getLegend();
categoryplot = (CategoryPlot) jfreechart.getPlot();
txtTitle.setFont(ft);

另一种极端的方法就是直接改jar包的源代码。

比如源码中有
setFont(new Font(xxx, Font.PLAIN, 18));
把xxx改为宋体

我使用的JFreeChart的.jar包为1.0.13有网友说这个版本的jar包对中文显示有问题,建议用更早的版本。

于是综合所有办法,采用换包(使用1.0.10)与设置font的方法重新写了一个程序直接将图片生成到本地磁盘。

package org.test.jfreechart;

import java.awt.Font;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.general.DefaultPieDataset;

public class JFreeChartTest3 {
public static DefaultPieDataset getDataset(){
   DefaultPieDataset dataset = new DefaultPieDataset();
   dataset.setValue("人事部", 13);
   dataset.setValue("研发部", 100);
   dataset.setValue("后勤部", 12);
   dataset.setValue("市场部", 50);
  
   return dataset;
}

public static void main(String []args){
   JFreeChart chart = ChartFactory.createPieChart("某公司人员组织结构图",getDataset(),true,true,true);
   Font font = new Font("SimSun",10,20);
   chart.getTitle().setFont(font);
   LegendTitle legend = chart.getLegend(0);
   legend.setItemFont(font);
   PiePlot plot = (PiePlot)chart.getPlot();
   plot.setLabelFont(font);
  
   try {
    OutputStream out = new FileOutputStream("com.jpeg");
    try {
     ChartUtilities.writeChartAsJPEG(out,chart,500,400);
     out.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }
  

}
}

图片显示如下:

解决JFreeChart无法正常显示中文问题_第1张图片

一切中文显示正常。

问题解决。同样将JFreeChart应用到JSP页面中,也能正常显示,无任何问题。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="org.jfree.data.general.DefaultPieDataset" %>
<%@ page import="org.jfree.chart.JFreeChart" %>
<%@ page import="org.jfree.chart.ChartFactory" %>
<%@ page import="org.jfree.chart.servlet.ServletUtilities" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
   
    <title>My JSP 'jfreechart.jsp' starting page</title>
   
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">   
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
    <%
    DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("人事部", 13);
dataset.setValue("研发部", 100);
dataset.setValue("后勤部", 12);
dataset.setValue("市场部", 50);

JFreeChart chart = ChartFactory.createPieChart3D("某公司人员组织结构图",dataset,true,true,true);
String fileName = ServletUtilities.saveChartAsPNG(chart,500,400,session);
String url = request.getContextPath()+"/DisplayChart?filename="+fileName;
    %>
   
    <img src="<%=url %>" width="500" height="400">
</body>
</html>


希望各位朋友不要遇到相同的问题,解决办法:

1。试用对中文支持好的JAR包。

2。设置FONT。

3。改源代码。(不建议使用)

你可能感兴趣的:(jfreechart)