使用jfreechart生成饼图报表

领导让先学习jfreechart生成报表,哎,学就学吧,反正没事干~~

我这是统计的全国各个省份的酒店数量,以饼图的方式显示出来。在我的文档中有hotel这个文件夹,里面放有以全国各个省份命名的文件夹,省级文件夹中又有以该省份中各个市命名的文件夹,然后每个市级文件夹中的放的就是这个市的酒店excel文件了,额~好啰嗦,意思明白了就得了~现在就是统计每个省中拥有的酒店的数量。

在工程中引入jfreechart-1.0.13.jar和jcommon-1.0.15.jar两个jar包。

具体方法参考以下代码:

package action;

import java.awt.Font;
import java.io.File;

import javax.swing.JPanel;
import javax.swing.filechooser.FileSystemView;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.util.SortOrder;

public class CreateChart extends ApplicationFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2621772465524599322L;

	public CreateChart(String title) {
		super(title);
		setContentPane(createDemoPanel());
	}

	// 生成显示图表的面板
	public static JPanel createDemoPanel() {
		JFreeChart jfreechart = createChart(createDataset());
		return new ChartPanel(jfreechart);
	}

	// 生成饼图数据集对象
	public static PieDataset createDataset() {
		DefaultPieDataset defaultpiedataset = new DefaultPieDataset();
		String root = FileSystemView.getFileSystemView().getDefaultDirectory()// 得到我的文档的路径
				.getAbsolutePath() + "/" + "hotel";
		File path = new File(root);
		if (path.exists() && path.isDirectory()) {
			for (int i = 0; i < path.listFiles().length; i++) {
				String fileName = path.listFiles()[i].getName();
				if (path.listFiles()[i].isDirectory()
						&& (fileName.endsWith("省") || fileName.endsWith("市") || fileName
								.endsWith("区"))) {
					defaultpiedataset.setValue(fileName,
							getFilesNum(path.listFiles()[i]));
				}
			}
		}
		defaultpiedataset.sortByValues(SortOrder.DESCENDING);// 通过片区的值进行降序排序
		return defaultpiedataset;
	}

	// 得到文件夹中文件的数量
	private static long getFilesNum(File path) {
		File[] fileList = path.listFiles();
		long fileNum = fileList.length;
		for (int i = 0; i < fileList.length; i++) {
			if (fileList[i].isDirectory()) {
				fileNum += getFilesNum(fileList[i]);
				fileNum--;
			}
		}
		return fileNum;
	}

	// 生成图表主对象JFreeChart
	public static JFreeChart createChart(PieDataset piedataset) {
		// 定义图表对象
		JFreeChart jfreechart = ChartFactory.createPieChart("酒店统计信息",
				piedataset, true, true, false);

		TextTitle textTitle = jfreechart.getTitle();
		textTitle.setFont(new Font("宋体", Font.PLAIN, 20)); // 标题文字乱码

		PiePlot plot = (PiePlot) jfreechart.getPlot();
		plot.setLabelFont(new Font("宋体", Font.BOLD, 20));// 饼上的文字乱码

		jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); // 图例文字乱码

		// 获得图表显示对象
		PiePlot pieplot = (PiePlot) jfreechart.getPlot();
		// 设置图表标签字体
		pieplot.setLabelFont(new Font("宋体", Font.ITALIC, 14));
		pieplot.setNoDataMessage("No data available");// 没有数据时的显示信息
		pieplot.setCircular(true);// 饼图是否为正圆
		pieplot.setLabelGap(0.01D);// 间距
		return jfreechart;
	}

	public static void main(String[] args) {
		CreateChart chart = new CreateChart("酒店统计信息");
		chart.pack();// 调整窗口大小,自动适应子组件的首选大小和布局
		RefineryUtilities.centerFrameOnScreen(chart);// 将窗口放在屏幕中间
		chart.setVisible(true);// 设置为可见
	}
}

 

输出为:

 
使用jfreechart生成饼图报表_第1张图片
 

你可能感兴趣的:(UI,swing,中间件,Excel,jfreechart)