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);
}
}
英文显示是没问题,但如果想使用中文就会有乱码了。
如下图:
为了解决这个问题,可以通过设置字体的方法:
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中文无法显示的问题了。