---恢复内容开始---

1、使用的报表工具:

    jfree报表    

2、下载网址:

    http://www.jfree.org/

  下载之后先解压:如下图

  

  下载后:需要的jar包!如下图:

  

打开:找到以下的两个jar包

再导入开发项目中:

之后就可以正常使用jfree报表了:

 

3、jfree报表API文档:

http://tool.oschina.net/apidocs/apidoc?api=jfreechart

参考博文:Bannings博客

http://blog.csdn.net/zhangao0086/article/details/6365468

4、直接上测试源码:

4.1饼状图:

  1 import java.awt.Font;
2 import java.awt.Image;
3 import java.io.File;
4 import java.util.HashMap;
5 import java.util.Iterator;
6 import java.util.Map;
7 import java.util.Map.Entry;
8 import java.util.Set;
9
10 import javax.imageio.ImageIO;
11
12 import org.jfree.chart.ChartFactory;
13 import org.jfree.chart.ChartUtilities;
14 import org.jfree.chart.JFreeChart;
15 import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
16 import org.jfree.chart.plot.PiePlot;
17 import org.jfree.data.general.DefaultPieDataset;
18
19 /**
20 * 测试生成报表图形
21 * Created by Jason 2016-7-18 上午7:14:59
22 */
23 public class CharReport_BZT {
24 /**
25 * 提供静态方法:获取报表图形1:饼状图
26 * @param title 标题
27 * @param datas 数据
28 * @param font 字体
29 */
30 public static void createPort(String title,Map<String,Double> datas,Font font){
31 try {
32 //如果不使用Font,中文将显示不出来
33
34 DefaultPieDataset pds = new DefaultPieDataset();
35
36 //获取迭代器:
37 Set<Entry<String, Double>> set = datas.entrySet();
38 Iterator iterator=(Iterator) set.iterator();
39 Entry entry=null;
40 while(iterator.hasNext()){
41 entry=(Entry) iterator.next();
42 pds.setValue(entry.getKey().toString(),Double.parseDouble(entry.getValue().toString()));
43 }
44 /**
45 * 生成一个饼图的图表
46 *
47 * 分别是:显示图表的标题、需要提供对应图表的DateSet对象、是否显示图例、是否生成贴士以及是否生成URL链接
48 */
49 JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, true);
50 //设置图片标题的字体
51 chart.getTitle().setFont(font);
52
53 //得到图块,准备设置标签的字体
54 PiePlot plot = (PiePlot) chart.getPlot();
55
56 //设置分裂效果,需要指定分裂出去的key
57 plot.setExplodePercent("天使-彦", 0.1);
58
59 //设置标签字体
60 plot.setLabelFont(font);
61
62 //设置图例项目字体
63 chart.getLegend().setItemFont(font);
64
65 /**
66 * 设置开始角度(弧度计算)
67 *
68 * 度 0° 30° 45° 60° 90° 120° 135° 150° 180° 270° 360°
69 * 弧度 0 π/6 π/4 π/3 π/2 2π/3 3π/4 5π/6 π 3π/2 2π
70 */
71 plot.setStartAngle(new Float(3.14f / 2f));
72
73 //设置背景图片,设置最大的背景
74 Image img = ImageIO.read(new File("f:/test/1.jpg"));
75 chart.setBackgroundImage(img);
76
77 //设置plot的背景图片
78 img = ImageIO.read(new File("f:/test/2.jpg"));
79 plot.setBackgroundImage(img);
80
81 //设置plot的前景色透明度
82 plot.setForegroundAlpha(0.7f);
83
84 //设置plot的背景色透明度
85 plot.setBackgroundAlpha(0.0f);
86
87 //设置标签生成器(默认{0})
88 //{0}:key {1}:value {2}:百分比 {3}:sum
89 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1}票)/{2}"));
90
91 //将内存中的图片写到本地硬盘
92 ChartUtilities.saveChartAsJPEG(new File("f:/test/aa.png"), chart, 600, 300);
93 } catch (Exception e) {
94 e.printStackTrace();
95 }
96 }
97
98 public static void main(String[] args) {
99 Font font = new Font("新宋体", Font.BOLD, 15);
100 Map<String, Double> map=new HashMap<String, Double>();
101 map.put("天使-彦", (double) 1000);
102 map.put("雄兵连-蔷薇", (double) 700);
103 map.put("太阳之光-蕾娜", (double) 600);
104 map.put("辅助-琴女", (double) 400);
105 CharReport_BZT.createPort("超神学院女神投票结果", map, font);
106 }
118
119 }

运行结果:

4.2柱状图:

  1 import java.awt.Font;
2 import java.io.File;
3 import java.util.HashMap;
4 import java.util.HashSet;
5 import java.util.Iterator;
6 import java.util.Map;
7 import java.util.Set;
8
9 import javax.imageio.ImageIO;
10
11 import org.jfree.chart.ChartFactory;
12 import org.jfree.chart.ChartUtilities;
13 import org.jfree.chart.JFreeChart;
14 import org.jfree.chart.plot.CategoryPlot;
15 import org.jfree.chart.plot.PlotOrientation;
16 import org.jfree.data.category.DefaultCategoryDataset;
17
18 import java.util.List;
19 import java.util.Map.Entry;
20
21
22 /**
23 * Created by Jason 2016-7-18 上午8:12:38
24 */
25 public class CharReport_ZZT {
26
27 /**
28 * 提供静态方法:获取报表图形2:柱状图
29 * @param title 标题
30 * @param datas 数据
31 * @param type 分类(第一季,第二季.....)
32 * @param danwei 柱状图的数量单位
33 * @param font 字体
34 */
35 public static void createPort(String title,Map<String,Map<String,Double>> datas,String type,String danwei,Font font){
36 try {
37 //种类数据集
38 DefaultCategoryDataset ds = new DefaultCategoryDataset();
39
40
41 //获取迭代器:
42 Set<Entry<String, Map<String, Double>>> set1 = datas.entrySet(); //总数据
43 Iterator iterator1=(Iterator) set1.iterator(); //第一次迭代
44 Iterator iterator2=null;
45 HashMap<String, Double> map = null;
46 Set<Entry<String,Double>> set2=null;
47 Entry entry1=null;
48 Entry entry2=null;
49
50 while(iterator1.hasNext()){
51 entry1=(Entry) iterator1.next(); //遍历分类
52
53 map=(HashMap<String, Double>) entry1.getValue();//得到每次分类的详细信息
54 set2=map.entrySet(); //获取键值对集合
55 iterator2=set2.iterator(); //再次迭代遍历
56 while (iterator2.hasNext()) {
57 entry2= (Entry) iterator2.next();
58 ds.setValue(Double.parseDouble(entry2.getValue().toString()),//每次统计数量
59 entry2.getKey().toString(), //名称
60 entry1.getKey().toString()); //分类
61 System.out.println("当前:--- "+entry2.getKey().toString()+"--"
62 +entry2.getValue().toString()+"--"
63 +entry1.getKey().toString());
64 }
65 System.out.println("-------------------------------------");
66 }
67
68 //创建柱状图,柱状图分水平显示和垂直显示两种
69 JFreeChart chart = ChartFactory.createBarChart(title, type, danwei, ds, PlotOrientation.VERTICAL, true, true, true);
70
71 //设置整个图片的标题字体
72 chart.getTitle().setFont(font);
73
74 //设置提示条字体
75 font = new Font("宋体", Font.BOLD, 15);
76 chart.getLegend().setItemFont(font);
77
78 //得到绘图区
79 CategoryPlot plot = (CategoryPlot) chart.getPlot();
80 //得到绘图区的域轴(横轴),设置标签的字体
81 plot.getDomainAxis().setLabelFont(font);
82
83 //设置横轴标签项字体
84 plot.getDomainAxis().setTickLabelFont(font);
85
86 //设置范围轴(纵轴)字体
87 plot.getRangeAxis().setLabelFont(font);
88 //存储成图片
89
90 //设置chart的背景图片
91 chart.setBackgroundImage(ImageIO.read(new File("f:/test/1.jpg")));
92
93 plot.setBackgroundImage(ImageIO.read(new File("f:/test/2.jpg")));
94
95 plot.setForegroundAlpha(1.0f);
96
97 ChartUtilities.saveChartAsJPEG(new File("f:/test/bb.png"), chart, 600, 400);
98 } catch (Exception e) {
99 e.printStackTrace();
100 }
101 }
102
103 public static void main(String[] args) {
104
105
106 Map<String, Map<String, Double>> datas =new HashMap<String, Map<String,Double>>();
107
108 Map<String, Double> map1=new HashMap<String, Double>();
109 Map<String, Double> map2=new HashMap<String, Double>();
110 Map<String, Double> map3=new HashMap<String, Double>();
111 Map<String, Double> map4=new HashMap<String, Double>();
112
113 //设置第一期的投票信息
114 map1.put("天使-彦", (double) 1000);
115 map1.put("雄兵连-蔷薇", (double) 700);
116 map1.put("太阳之光-蕾娜", (double) 600);
117 map1.put("辅助-琴女", (double) 400);
118
119 //设置第二期的投票信息
120 map2.put("天使-彦", (double) 1300);
121 map2.put("雄兵连-蔷薇", (double) 900);
122 map2.put("太阳之光-蕾娜", (double) 800);
123 map2.put("辅助-琴女", (double) 500);
124
125 //设置第三期的投票信息
126 map2.put("天使-彦", (double) 2000);
127 map3.put("雄兵连-蔷薇", (double) 1700);
128 map3.put("太阳之光-蕾娜", (double) 1000);
129 map3.put("辅助-琴女", (double) 1000);
130
131 //设置第四期的投票信息
132 map4.put("天使-彦", (double) 3000);
133 map4.put("雄兵连-蔷薇", (double) 2500);
134 map4.put("太阳之光-蕾娜", (double) 1600);
135 map4.put("辅助-琴女", (double) 1400);
136
137 //压入数据
138 datas.put("第一季", map1);
139 datas.put("第二季", map2);
140 datas.put("第三季-神与神", map3);
141 // datas.put("第四季-黑甲", map4);
142
143 Font font = new Font("宋体", Font.BOLD, 20);
144 CharReport_ZZT.createPort("超神学院前四季最受欢迎的女性角色投票结果",datas,"超神纪元","数量单位(票)",font);
145 }
146
147 }

运行效果:

4.3折线图

  1 import java.awt.Color;
2 import java.awt.Font;
3 import java.io.File;
4 import java.util.HashMap;
5 import java.util.Iterator;
6 import java.util.Map;
7 import java.util.Set;
8 import java.util.Map.Entry;
9
10 import javax.imageio.ImageIO;
11
12 import org.jfree.chart.ChartFactory;
13 import org.jfree.chart.ChartUtilities;
14 import org.jfree.chart.JFreeChart;
15 import org.jfree.chart.plot.CategoryPlot;
16 import org.jfree.chart.plot.PlotOrientation;
17 import org.jfree.data.category.DefaultCategoryDataset;
18
19
20 /**
21 * Created by Jason 2016-7-18 上午9:13:20
22 */
23 public class CharReport_ZXT {
24 /**
25 * 提供静态方法:获取报表图形3:折线图
26 * @param title 标题
27 * @param datas 数据
28 * @param type 分类(第一季,第二季.....)
29 * @param danwei 柱状图的数量单位
30 * @param font 字体
31 */
32 public static void createPort(String title,Map<String,Map<String,Double>> datas,String type,String danwei,Font font){
33 try {
34 //种类数据集
35 DefaultCategoryDataset ds = new DefaultCategoryDataset();
36
37
38 //获取迭代器:
39 Set<Entry<String, Map<String, Double>>> set1 = datas.entrySet(); //总数据
40 Iterator iterator1=(Iterator) set1.iterator(); //第一次迭代
41 Iterator iterator2=null;
42 HashMap<String, Double> map = null;
43 Set<Entry<String,Double>> set2=null;
44 Entry entry1=null;
45 Entry entry2=null;
46 int index=1;
47 while(iterator1.hasNext()){//4种分类
48 entry1=(Entry) iterator1.next(); //遍历分类
49 map=(HashMap<String, Double>) entry1.getValue();//得到每次分类的详细信息
50 System.err.println(map.size());
51 set2=map.entrySet(); //获取键值对集合
52 iterator2=set2.iterator(); //再次迭代遍历
53 while (iterator2.hasNext()) {//4-4
54
55 entry2= (Entry) iterator2.next();
56 ds.setValue(Double.parseDouble(entry2.getValue().toString()),//每次统计数量
57 entry2.getKey().toString(), //名称
58 entry1.getKey().toString()); //分类
59 System.out.println("当前:--- "+entry2.getKey().toString()+"--"
60 +entry2.getValue().toString()+"--"
61 +entry1.getKey().toString());
62 }
63 System.out.println("--------------------------");
64 }
65
66 //创建折线图,折线图分水平显示和垂直显示两种
67 // JFreeChart chart2 = ChartFactory.createLineChart(title, type, danwei, ds,//2D折线图
68 // PlotOrientation.VERTICAL,
69 // true, true, true);
70 JFreeChart chart = ChartFactory.createLineChart3D(title, type, danwei, ds,//3D折线图
71 PlotOrientation.VERTICAL,
72 true, true, false);
73
74 //设置整个图片的标题字体
75 chart.getTitle().setFont(font);
76
77 //设置提示条字体
78 font = new Font("宋体", Font.BOLD, 15);
79 chart.getLegend().setItemFont(font);
80
81 //得到绘图区
82 CategoryPlot plot = (CategoryPlot) chart.getPlot();
83 //得到绘图区的域轴(横轴),设置标签的字体
84 plot.getDomainAxis().setLabelFont(font);
85
86 //设置横轴标签项字体
87 plot.getDomainAxis().setTickLabelFont(font);
88
89 //设置范围轴(纵轴)字体
90 font = new Font("宋体", Font.BOLD, 18);
91 plot.getRangeAxis().setLabelFont(font);
92 //存储成图片
93
94 //设置chart的背景图片
95 chart.setBackgroundImage(ImageIO.read(new File("f:/test/1.jpg")));
96
97 // plot.setBackgroundImage(ImageIO.read(new File("f:/test/2.jpg")));
98
99 plot.setForegroundAlpha(1.0f);
100
101 ChartUtilities.saveChartAsJPEG(new File("f:/test/cc.png"), chart, 800, 400);
102 } catch (Exception e) {
103 e.printStackTrace();
104 }
105 }
106
107 public static void main(String[] args) {
108
109 Map<String, Map<String, Double>> datas =new HashMap<String, Map<String,Double>>();
110
111 Map<String, Double> map1=new HashMap<String, Double>();
112 Map<String, Double> map2=new HashMap<String, Double>();
113 Map<String, Double> map3=new HashMap<String, Double>();
114 Map<String, Double> map4=new HashMap<String, Double>();
115
116 //设置第一期的投票信息
117
118 map1.put("蔷薇", (double) 700);
119 map1.put("彦", (double) 1000);
120 map1.put("蕾娜", (double) 600);
121 map1.put("琴女", (double) 400);
122
123 //设置第二期的投票信息
124 map2.put("蔷薇", (double) 900);
125 map2.put("彦", (double) 2000);
126 map2.put("蕾娜", (double) 800);
127 map2.put("琴女", (double) 500);
128
129 //设置第三期的投票信息
130 map3.put("蔷薇", (double) 1700);
131 map3.put("彦", (double) 1000);
132 map3.put("蕾娜", (double) 1400);
133 map3.put("琴女", (double) 1000);
134
135 //设置第四期的投票信息
136 map4.put("蔷薇", (double) 2500);
137 map4.put("彦", (double) 3000);
138 map4.put("蕾娜", (double) 1600);
139 map4.put("琴女", (double) 1400);
140
141 //压入数据
142 datas.put("第一季", map1);
143 datas.put("第二季", map2);
144 datas.put("第三季", map3);
145 datas.put("第四季", map4);
146
147
148
149 Font font = new Font("宋体", Font.BOLD, 20);
150 CharReport_ZXT.createPort("超神学院前四季最受欢迎的女性角色投票结果",datas,"超神纪元","数量单位(票)",font);
151
152 }
153
154 }

运行效果:

研究技术需要静下心来,一点一点地深究.......
 附上原博客地址http://www.cnblogs.com/newwind/p/5680389.html"
分类: 工具类,报表

---恢复内容结束---

java --jfree报表的更多相关文章

  1. 推荐6款常用的Java开源报表制作工具

    JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表.JasperReports 支持PDF.HTML.XLS.CSV和XML文件输出格 ...

  2. 关于JAVA项目报表选型过程

    本人一直在走.NET技术路线,考虑到后期公司搞JAVA项目,也算是进行技术灾备,开始对JAVA技术进行关注.万事开头难,也是上来一头包.没办法,顶着上吧.上面开始分给我任务了.就是对后期项目报表进行方 ...

  3. Java开发报表——Grid++Report 报表设计器

    为了让数据显示的更加形象生动,报表在项目中差点儿是很常见的,可是大致能够分为两类: 一,图形:以图形的形式显示数据,比如柱状图,折线图,饼形图等等,这里有许多关于这方面的工具,比如JFreeChart ...

  4. java的报表下载代码excel

    /** * 汇总报表数据下载 * */ private ModelAndView exportSummaryDatadown(HttpServletRequest request, HttpServl ...

  5. Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表

    在接下来的教程中,我们将实现一个简单的JasperReports示例,展现其基本的开发.使用流程.文章很长,不过是以图片居多,文字并不多. 实例中使用最新的Jasper Studio5.2进行报表设计 ...

  6. 12、借助Jacob实现Java打印报表(Excel、Word)

    12.使用Jacob来处理文档 Word或Excel程序是以一种COM组件形式存在的.如果能够在Java中调用相应组件,便能使用它的方法来获取文档中的文本信息.Jacob是一个JAVA到微软的COM接 ...

  7. Java Excel报表导出Demo

    /** * 一级权限数据导出 * @return */ @RequestMapping(value = "/getExportData", method = RequestMeth ...

  8. 葡萄城报表介绍:Java 报表

    一.Java 报表定义 Java 是一门面向对象编程语言,不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 里难以理解的多继承.指针等概念,因此 Java 语言具有功能强大和简单易用两个特征.Ja ...

  9. jasperReports 通过java导出各种格式报表,及javaweb项目整合显示各种报表

    注意:编写此项目时,请先手动编写**.jrxml  或者用IReport生成**.jrxml或**.jasper 注:java导出报表与web项目显示报表方法其实是相同的,只不过有一句代码不同,如下 ...

随机推荐

  1. python函数(2):函数进阶

    昨天说了函数的一些最基本的定义,今天我们继续研究函数.今天主要研究的是函数的命名空间.作用域.函数名的本质.闭包等等 预习: 1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的 ...

  2. JStorm与Storm源码分析(三)--Scheduler,调度器

    Scheduler作为Storm的调度器,负责为Topology分配可用资源. Storm提供了IScheduler接口,用户可以通过实现该接口来自定义Scheduler. 其定义如下: public ...

  3. Angular4.0学习笔记 从入门到实战打造在线竞拍网站学习笔记之二--路由

    Angular4.0基础知识见上一篇博客 路由 简介 接下来学习路由的相关知识 本来是不准备写下去的,因为当时看视频学的时候感觉自己掌握的不错 ( 这是一个灰常不好的想法 ) ,过了一段时间才发现An ...

  4. storm从入门到放弃(二),任务分配过程-核心机密

    背景:目前就职于国内最大的IT咨询公司,恰巧又是毕业季,所在部门招了100多个应届毕业生,本人要跟部门新人进行为期一个月的大数据入职培训,特此将整理的文档分享出来. 原文和作者一起讨论:http:// ...

  5. Python处理csv文件

    Python处理csv文件 CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看.由于是纯文本,任何编辑器也都可打开.与Excel文件不同,CSV文件中: 值没 ...

  6. 斗地主[NOIP2015]

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...

  7. git入门(3)git checkout 和git branch分支的创建和删除

    在一个项目中,需要多人同时开发,协同coding 要求: 开发时请用开发分支daily/0.0.1, 禁止直接使用master分支开发新建分支 git checkout -b daily/0.0.1 ...

  8. Xamarin.Forms(二) 返回页面的数据刷新

    这几天在做一个课程表的小程序,遇到了这样一个问题: app打开便是课程表的页面,如果课程表页面没有数据的话需要跳转到同步课表页面模拟登陆教务管理系统获取课表,并显示在课程表页面,这样就需要从同步课表页 ...

  9. 使用Visual Studio Code调试基于ActionScript的LayaAir HTML5游戏

    使用Visual Studio Code(VS Code)调试的优势 使用VS Code我们可以极大地提高LayaAir Html5游戏项目的调试效率,VS Code的优势有以下几点: 在发生Java ...

  10. Eclipse错误:Implicit super constructor ClassName is undefined for default constructor. Must define an explicit constructor

    public class Test01 { private String name; private int age; public Test01(String name){ this.name = ...