如果使用JfreeChart默认的声明方式创建出来的图表图片上中文标题是方框或乱码,这个不用说肯定和字体有关.接下来来看一下解决办法.
打开doc文件里的TextTitle类你会发现
/** The default font. */
public static final Font DEFAULT_FONT = new Font("SansSerif", Font.BOLD,12);
JFreeChart里最后将你创建的实例传给了另一个类的方法:currentTheme.apply(chart);
找到theme的顶级类StandardChartTheme你会发现这个apply()方法,
public void apply(JFreeChart chart) {
if (chart == null) {
throw new IllegalArgumentException("Null 'chart' argument.");
}
TextTitle title = chart.getTitle();
if (title != null) {
title.setFont(this.extraLargeFont); //------------在这里它将标题的字体设置成了事先定义好的字体,如下两段代码;
title.setPaint(this.titlePaint);
}
123 private Font extraLargeFont;
294 public StandardChartTheme(String name) {
295 if (name == null) {
296 throw new IllegalArgumentException("Null 'name' argument.");
297 }
298 this.name = name;
299 this.extraLargeFont = new Font("Tahoma", Font.BOLD, 20); //在构造函数里将此字体设置成了"Tahoma"
现在我们已经很清楚不能正确显示中文的原因了,如何来解决呢?
很简单:
JFreeChart chart=ChartFactory.createPieChart(titleString,pieDataset,true,true,false);
chart.getTitle().setFont(new Font("宋体", Font.BOLD,12));
我们只要重新设置TextTitle的字体就行了.
不过这种方法只适用于中文操作系统,因为已经有中文字体了.要想在非中文系统上用怕是要在程序中带上一个中文字体库,然后再调用该字库.
TonyLee.