领导让先学习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);// 设置为可见
}
}
输出为: