您的位置:首页 > 其它

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

2012-11-07 23:18 781 查看
2009-10-12 23:15

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

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

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应用到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。改源代码。(不建议使用)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐