0
点赞
收藏
分享

微信扫一扫

jfreechart中文无法显示的问题

炽凤亮尧 2023-09-16 阅读 42

jfreechart是一个开源免费的Java图表工具。

一个简单的入门例子:

package plot;
 
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
 
public class Example {
	public static void main(String[] args) {
 
		// 创建数据
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(15, "schools", "1970");
		dataset.addValue(30, "schools", "1980");
		dataset.addValue(60, "schools", "1990");
		dataset.addValue(120, "schools", "2000");
		dataset.addValue(240, "schools", "2010");
		dataset.addValue(300, "schools", "2020");
		dataset.addValue(320, "schools", "2022");
 
		// 创建JFreeChart对象
		JFreeChart chart = ChartFactory.createLineChart(
				"Example", // 图标题
				"Year", // x轴标题
				"Schools Count", // y轴标题
				dataset, //数据集
				PlotOrientation.VERTICAL, //图表方向
				false, true, false);
 
 
		// 利用awt进行显示
		ChartFrame chartFrame = new ChartFrame("Test", chart);
		chartFrame.pack();
		chartFrame.setVisible(true);
	}
 
}

英文显示是没问题,但如果想使用中文就会有乱码了。

如下图:

jfreechart中文无法显示的问题_java

为了解决这个问题,可以通过设置字体的方法:


TextTitle textTitle = chart.getTitle();
        textTitle.setFont(getFont(Font.BOLD,15));

        CategoryPlot plot=chart.getCategoryPlot();
        CategoryAxis domainAxis=plot.getDomainAxis();
        domainAxis.setLabelFont(getFont(Font.BOLD,15));
        domainAxis.setTickLabelFont(getFont(Font.BOLD,15));
        ValueAxis valueAxis=plot.getRangeAxis();
        valueAxis.setLabelFont(getFont(Font.BOLD,15));

/**
     *************************************************************************
     * JFreeChartHandler.java——initFontFile<br>
     * Author: karrychang<br>
     * Date: 2018/3/15<br>
     * Description:<br>
     * Used in:<br>
     * @param
     * @return
     *************************************************************************
     */
    private static void initFontFile() {
        if (file == null) {
            URL url = App.class.getClassLoader().getResource("liukai.ttf");
            System.out.println(url);
            String vPath = url.getPath();
            file = new File(vPath);
        }
    }

    /**
     *************************************************************************
     * JFreeChartHandler.java——getFont<br>
     * Author: karrychang<br>
     * Date: 2018/3/15<br>
     * Description:<br>
     * Used in:<br>
     * @param style
     * @param size
     * @return
     *************************************************************************
     */
    private static Font getFont(int style, int size) {

        try {
            initFontFile();
            if (file == null || !file.exists()) {
                return defFont;
            }
            Font nf = Font.createFont(Font.TRUETYPE_FONT, file);
            nf = nf.deriveFont(style, size);
            return nf;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return defFont;
    }

就可以解决jfreechart中文无法显示的问题了。

举报

相关推荐

0 条评论