JFreeChart的使用非常简单,我们只需要提供满足JFreeChart需要的数据,即可使用ChartFactory创建一个JFreeChart图表,该图表既可以输出成图片文件,也可以导出成各种格式的文档。
现在以生成一张饼图为例,示范如何使用JFreeChart生成统计图。
准备
确保应用的JFreeChart配置正确:必需含有jfreechart-1.0.13.jar和jcommon-1.0.16.jar两个JAR包。
PieCharDemo代码
- package jfreechat;
- import java.awt.Font;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import org.jfree.chart.ChartFactory;
- import org.jfree.chart.ChartUtilities;
- 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;
- public class PieCharDemo {
- public static void main(String[] args) throws IOException {
- DefaultPieDataset data = getDataset();
- JFreeChart chart = ChartFactory.createPieChart(
- "图书销量统计图", //图表标题
- getDataset(), //数据
- true, //是否显示图例
- false, //是否显示工具提示
- false //是否生成URL
- );
- //重新设置图表标题,改变字体
- chart.setTitle(new TextTitle("图书销量统计图",new Font("黑体", Font.ITALIC, 22)));
- //取得统计图表的第一个图例
- LegendTitle legend = chart.getLegend(0);
- //修改图例的字体
- legend.setItemFont(new Font("宋体", Font.BOLD, 14));
- //获得饼图的Plot对象
- PiePlot plot = (PiePlot)chart.getPlot();
- //设置饼图各部分的标签字体
- plot.setLabelFont(new Font("隶属", Font.BOLD, 18));
- //设置透明度(0-1.0之间)
- plot.setBackgroundAlpha(0.9f);
- FileOutputStream fos = new FileOutputStream("d:\\book.jpg");
- ChartUtilities.writeChartAsJPEG(
- fos, //输出到哪个输出流
- 1, //JPEG图片的质量,0-1之间
- chart, //统计图表对象
- 800, //图片宽度
- 600, //图片高度
- null //ChartRebderingInfo信息
- );
- fos.close();
- }
- private static DefaultPieDataset getDataset(){
- DefaultPieDataset dataset = new DefaultPieDataset();
- dataset.setValue("Java疯狂讲义", 47000);
- dataset.setValue("Struts2", 38000);
- dataset.setValue("Hibernate", 31000);
- dataset .setValue("Spring", 29000);
- dataset.setValue("AJAX", 25000);
- return dataset;
- }
- }
上面代码先提供一个方法,该方法返回Dataset()对象,这个Dataset()就是创建统计图表的底层数据,然后调用ChartFactory的createPieChart方法来生成一个JFreeChart对象,这个对象就是统计图表,该图表可以直接输出到图片文件中,也可导出成各种格式的文件。
上面的实例是导出了一张JPG格式的图片文件,编译、运行上述代码,在D:\下将生成一张book.jpg的图片,生成的饼图如下:
从上图中可以看出,JFreeChart统计图可以分成3个部分:
- 图表标题部分
- 实际统计图部分
- 图表图例部分
结合上面代码部分可以看出,修改统计图表的标题部分(包括修改图表标题内容、字体大小等)都是通过JFreeChart对象的setTitle方法实现的;修改统计图表的图例则是通过LegendTitle对象来完成。一个统计图表可以包含多个图例,当调用JFreeChart对象的getLegend(int index)方法时,就可以取得该图表的指定索引的图例对象,一旦取得了指定图例,就可以修改图例的文本内容、字体大小等。
在上面程序中,我们调用了ChartFactory的createPieChart方法,该方法用于创建一个平面的饼图;如果将该方法改为createPieChart3D,则可以创建一个3D的饼图。
PieChart3D代码
- package jfreechat;
- import java.awt.Font;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import org.jfree.chart.ChartFactory;
- import org.jfree.chart.ChartUtilities;
- 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;
- public class PieChart3D {
- public static void main(String[] args) throws IOException {
- DefaultPieDataset data = getDataset();
- JFreeChart chart = ChartFactory.createPieChart3D(
- "图书销量统计图", //图表标题
- getDataset(), //数据
- true, //是否显示图例
- false, //是否显示工具提示
- false //是否生成URL
- );
- //重新设置图表标题,改变字体
- chart.setTitle(new TextTitle("图书销量统计图-3D",new Font("黑体", Font.ITALIC, 22)));
- //取得统计图表的第一个图例
- LegendTitle legend = chart.getLegend(0);
- //修改图例的字体
- legend.setItemFont(new Font("宋体", Font.BOLD, 14));
- //获得饼图的Plot对象
- PiePlot plot = (PiePlot)chart.getPlot();
- //设置饼图各部分的标签字体
- plot.setLabelFont(new Font("隶属", Font.BOLD, 18));
- //设置透明度(0-1.0之间)
- plot.setBackgroundAlpha(0.9f);
- FileOutputStream fos = new FileOutputStream("d:\\book3D.jpg");
- ChartUtilities.writeChartAsJPEG(
- fos, //输出到哪个输出流
- 1, //JPEG图片的质量,0-1之间
- chart, //统计图表对象
- 800, //图片宽度
- 600, //图片高度
- null //ChartRebderingInfo信息
- );
- fos.close();
- }
- private static DefaultPieDataset getDataset(){
- DefaultPieDataset dataset = new DefaultPieDataset();
- dataset.setValue("Java疯狂讲义", 47000);
- dataset.setValue("Struts2", 38000);
- dataset.setValue("Hibernate", 31000);
- dataset .setValue("Spring", 29000);
- dataset.setValue("AJAX", 25000);
- return dataset;
- }
- }