解决:FreeChart图形中文乱码问题

在使用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);
    }

}

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值