问题描述:
问题分析:
1、当前编码不支持中文。
/**
* 生成饼图(返回JFreeChart)
*
* @param chartTitle 图表标题
* @param legendNameList 图例名称列表
* @param dataList 数据列表
* @return
*/
public static JFreeChart createPieChart(String chartTitle, List<String> legendNameList, List<Object> dataList) {
//创建饼图
JFreeChart chart = ChartFactory.createPieChart(chartTitle, createDefaultPieDataset(legendNameList, dataList));
// 设置抗锯齿,防止字体显示不清楚
chart.setTextAntiAlias(false);
// 对饼图进行渲染
setPieRender(chart.getPlot());
// 设置标注无边框
chart.getLegend().setFrame(new BlockBorder(Color.WHITE));
// 标注位于右侧
chart.getLegend().setPosition(RectangleEdge.RIGHT);
return chart;
}
解决办法:设置unicode编码解决中文乱码问题。
/**
* 生成主题
*
* @param fontName 字体名称(默认为宋体)
* @return
*/
public static StandardChartTheme createChartTheme(String fontName) {
StandardChartTheme theme = new StandardChartTheme("unicode") {
public void apply(JFreeChart chart) {
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
super.apply(chart);
}
};
fontName = StrUtil.isBlank(fontName) ? "宋体" : fontName;
theme.setExtraLargeFont(new Font(fontName, Font.PLAIN, 20));
theme.setLargeFont(new Font(fontName, Font.PLAIN, 14));
theme.setRegularFont(new Font(fontName, Font.PLAIN, 12));
theme.setSmallFont(new Font(fontName, Font.PLAIN, 10));
return theme;
}
/**
* 生成饼图(返回JFreeChart)
*
* @param chartTitle 图表标题
* @param legendNameList 图例名称列表
* @param dataList 数据列表
* @param theme 主题(null代表默认主题)
* @return
*/
public static JFreeChart createPieChart(String chartTitle, List<String> legendNameList, List<Object> dataList, StandardChartTheme theme) {
//设置主题,防止中文乱码
theme = theme == null ? createChartTheme("") : theme;
ChartFactory.setChartTheme(theme);
//创建饼图
JFreeChart chart = ChartFactory.createPieChart(chartTitle, createDefaultPieDataset(legendNameList, dataList));
// 设置抗锯齿,防止字体显示不清楚
chart.setTextAntiAlias(false);
// 对饼图进行渲染
setPieRender(chart.getPlot());
// 设置标注无边框
chart.getLegend().setFrame(new BlockBorder(Color.WHITE));
// 标注位于右侧
chart.getLegend().setPosition(RectangleEdge.RIGHT);
return chart;
}
注:
ChartFactory.setChartTheme()方法要在ChartFactory.createPieChart()方法之前调用,否则设置的主题不会生效。