在使用FreeChart作图时,如果直接使用中文,会导致出现乱码,原因在于FreeChart为外国文所写,其默认字体并不包含中文。
以简单的饼状图为例。
首先看没有进行中文字体处理的效果:
package SWing;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
class FreeChartDemo{
private PieDataset getPieDataset(){
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("高中生", 800);
dataset.setValue("本科生", 300);
dataset.setValue("研究生", 200);
dataset.setValue("博士生", 100);
return dataset;
}
public JFreeChart getFreeChart(){
PieDataset dataset = getPieDataset();
JFreeChart freeChart = ChartFactory.createPieChart("学位授予", dataset, true, true, false);
return freeChart;
}
}
public class PieChart {
public static void main(String[] args) {
FreeChartDemo freeChartDemo = new FreeChartDemo();
JFreeChart chart = freeChartDemo.getFreeChart();
ChartFrame frame = new ChartFrame("饼状图", chart);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
再来看看进行处理后的效果:
package SWing;
import java.awt.Font;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
class FreeChartDemo{
private PieDataset getPieDataset(){
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("高中生", 800);
dataset.setValue("本科生", 300);
dataset.setValue("研究生", 200);
dataset.setValue("博士生", 100);
return dataset;
}
public JFreeChart getFreeChart(){
PieDataset dataset = getPieDataset();
JFreeChart freeChart = ChartFactory.createPieChart("学位授予", dataset, true, true, false);
return freeChart;
}
//在此处设置字体
public void setPieChartFont(JFreeChart freeChart){
PiePlot pieChart = (PiePlot) freeChart.getPlot();
pieChart.setLabelFont(new Font("宋体", Font.BOLD, 20));
TextTitle textTitle = freeChart.getTitle();
textTitle.setFont(new Font("宋体", Font.ITALIC, 25));
LegendTitle legendTitle = freeChart.getLegend();
legendTitle.setItemFont(new Font("宋体", Font.BOLD+Font.ITALIC, 10));
}
}
public class PieChart {
public static void main(String[] args) {
FreeChartDemo freeChartDemo = new FreeChartDemo();
JFreeChart chart = freeChartDemo.getFreeChart();
freeChartDemo.setPieChartFont(chart);
ChartFrame frame = new ChartFrame("饼状图", chart);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}