博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFreeChart中文乱码解决方案
阅读量:5234 次
发布时间:2019-06-14

本文共 3028 字,大约阅读时间需要 10 分钟。

由于JFreeChart组件的版本、操作平台、JDK的设置等因素,在使用JFreeChart组件时可能会出现中文乱码的现象。遇到此问题时,可通过设置文字的字体来解决问题。在此提供以下两种解决此问题的方法。

 

一、设置主题的样式(强烈推荐)

在制图前,创建主题样式并制定样式中的字体,通过ChartFactory的setChartTheme()方法设置主题样式。

//创建主题样式StandardChartTheme standardChartTheme=new StandardChartTheme("CN");//设置标题字体standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20));//设置图例的字体standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,15));//设置轴向的字体standardChartTheme.setLargeFont(new Font("宋书",Font.PLAIN,15));//应用主题样式ChartFactory.setChartTheme(standardChartTheme);

 

例如:

DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("香蕉", 56.4);dataset.setValue("苹果", 63.5);dataset.setValue("橘子", 58.4);dataset.setValue("西瓜", 76.3);// 创建主题样式StandardChartTheme standardChartTheme = new StandardChartTheme("CN");// 设置标题字体standardChartTheme.setExtraLargeFont(new Font("宋书", Font.BOLD, 20));// 设置图例的字体standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));// 设置轴向的字体standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));// 应用主题样式ChartFactory.setChartTheme(standardChartTheme);JFreeChart chart = ChartFactory.createPieChart("测试PieChart",dataset, true, true, false);ChartUtilities.saveChartAsJPEG(new File(filePath), chart, 400, 300);

 

二、制定乱码文字的字体

使用JFreeChart绘制图表的时候,如果使用默认的字体会导致图标中的汉字显示为乱码。解决方法如下:

JFreeChart是用户使用该库提供的各类图标的统一接口,JFreeChart主要由三个部分构成:title(标题),legend(图释),plot(图表主体)。三个部分设置字体的方法分别如下:

1.Title

TextTitle textTitle = freeChart.getTitle();textTitle.setFont(new Font("宋体",Font.BOLD,20));

 

2.Legent

LegendTitle legend = freeChart.getLegend();if (legend!=null) {legend.setItemFont(new Font("宋体", Font.BOLD, 20));}

3.Plot

对于不同类型的图表对应Plot的不同的实现类,设置字体的方法也不完全相同。

对于使用CategoryPlot的图表(如柱状图):

CategoryPlot plot = (CategoryPlot)freeChart.getPlot();CategoryAxis domainAxis = plot.getDomainAxis();//(柱状图的x轴)domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,20));//设置x轴坐标上的字体domainAxis.setLabelFont(new Font("宋体",Font.BOLD,20));//设置x轴上的标题的字体ValueAxis valueAxis = plot.getRangeAxis();//(柱状图的y轴)valueAxis.setTickLabelFont(new Font("宋体",Font.BOLD,20));//设置y轴坐标上的字体valueAxis.setLabelFont(new Font("宋体",Font.BOLD,20));//设置y轴坐标上的标题的字体CategoryPlot plot = (CategoryPlot)freeChart.getPlot();CategoryAxis domainAxis = plot.getDomainAxis();//(柱状图的x轴)domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,20));//设置x轴坐标上的字体domainAxis.setLabelFont(new Font("宋体",Font.BOLD,20));//设置x轴上的标题的字体ValueAxis valueAxis = plot.getRangeAxis();//(柱状图的y轴)valueAxis.setTickLabelFont(new Font("宋体",Font.BOLD,20));//设置y轴坐标上的字体valueAxis.setLabelFont(new Font("宋体",Font.BOLD,20));//设置y轴坐标上的标题的字体

 

对于使用PiePlot的图标(如饼状图):

//三个部分设置字体的方法分别如下:TextTitle textTitle = chart.getTitle();textTitle.setFont(new Font("宋体", Font.BOLD, 20));LegendTitle legend = chart.getLegend();if (legend != null) {legend.setItemFont(new Font("宋体", Font.BOLD, 20));}PiePlot pie = (PiePlot) chart.getPlot();pie.setLabelFont(new Font("宋体", Font.BOLD, 12));pie.setNoDataMessage("No data available");pie.setCircular(true);pie.setLabelGap(0.01D);// 间距

 

转载于:https://www.cnblogs.com/jtmjx/archive/2013/04/29/3050846.html

你可能感兴趣的文章
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>
getopt_long
查看>>
TensorFlow MNIST CNN 代码
查看>>
javascript之Style物
查看>>
JSON跨域解决方案收集
查看>>
SSH框架整合总结
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
md5sum命令详解
查看>>
[bzoj1004] [HNOI2008] Cards
查看>>
应该是实例化对象的没有对属性赋值时,自动赋值为null,但不是空指针对象引用...
查看>>
原生HttpClient详细使用示例
查看>>
几道面试题
查看>>
Factory Design Pattern
查看>>
python中贪婪与非贪婪
查看>>
guava API整理
查看>>