在制作报表时,想直接使用Java代码提供数据。

网上找了一些文章,很多都是用Servlet做的。我不是想通过浏览器来观察它的输出。我想使用iReport的动态连接直接预览。

结合一些资料,加上自己的摸索终于成功了。

现整理如下:

需要的环境

JDK + iReport + Eclipse + PDF Reader

如果Eclipse没有的话也没关系,iReport需要的只是Java文件编译后的class文件。

Java部分(Eclipse)

1、JavaBean

一个简单 JavaBean —— Student。

1 packageds.javabean;2 /**

3 *4 *5 *@authorby Young.ZHU6 * on 2012-8-37 *8 * Package&FileName: ds.javabean.Student9 */

10 public classStudent {11 //~ Instance fields ********************************************************12 //序号

13 private intid;14 //姓名

15 privateString name;16 //性别

17 privateString gender;18 //出生年月

19 privateString birthday;20

21 //~ Constructors ***********************************************************

22 publicStudent() {23 }24 public Student(intid, String name, String gender, String birthday) {25 this.id =id;26 this.name =name;27 this.gender =gender;28 this.birthday =birthday;29 }30

31 //~ Methods ****************************************************************

32 public intgetId() {33 returnid;34 }35 public void setId(intid) {36 this.id =id;37 }38

39 publicString getName() {40 returnname;41 }42 public voidsetName(String name) {43 this.name =name;44 }45

46 publicString getGender() {47 returngender;48 }49 public voidsetGender(String gender) {50 this.gender =gender;51 }52

53 publicString getBirthday() {54 returnbirthday;55 }56 public voidsetBirthday(String birthday) {57 this.birthday =birthday;58 }59 }

2、Factory

iReport在使用JavaBean作为数据源时需要一个Factory。主要用来生成报表数据。

1 packageds.javabean;2

3 importjava.util.ArrayList;4 importjava.util.Collection;5

6 /**

7 * 生成JavaBean的工厂类。8 * 在iReport的DataSource的配置中会用到。9 *10 *@authorby Young.ZHU11 * on 2012-8-312 *13 * Package&FileName: ds.javabean.StudentFactory14 */

15 public classStudentFactory {16 //~ Static fields/initializers *********************************************17

18 //生成实体对象的个数

19 private static final int RECORD_COUNT = 100;20

21 //~ Methods ****************************************************************

22

23 /**

24 * 这个方法在iReport的DataResource配置时也会用到25 * 必须是静态方法 static26 *27 *@return

28 */

29 public static CollectioncreateBeanCollection() {30 Collection beanCollection = new ArrayList();31

32 for (int i = 0; i < RECORD_COUNT; i++) {33 beanCollection.add(StudentUtil.createStudent(i + 1));34 }35

36 returnbeanCollection;37 }38 }

3、Student的工具类

该类用来产生Student实例。主要是为了报表的数据不那么单调。

1 packageds.javabean;2

3 importjava.text.DateFormat;4 importjava.text.SimpleDateFormat;5

6 importjava.util.Date;7 importjava.util.Random;8

9

10 /**

11 * 随机生成Student实体对象的工具类12 *13 *@authorby Young.ZHU14 * on 2012-8-315 *16 * Package&FileName: ds.javabean.StudentUtil17 */

18 public classStudentUtil {19 //~ Static fields/initializers *********************************************

20

21 /*

22 * “姓”的字符数组23 */

24 private static String[] FIRST_NAME_ARR ={25 "赵",26 "钱",27 "孙",28 "李",29 "王",30 "张",31 "慕容",32 "上官",33 "东方",34 "朱"

35 };36

37 /*

38 * 其他中文数组39 */

40 private static String[] LAST_NAME_ARR ={41 "燕",42 "岩",43 "艳",44 "明",45 "建国",46 "小刚",47 "小娟",48 "华",49 "天明",50 "洋",51 "盈盈",52 "仁"

53 };54

55 /*

56 * 性别57 */

58 private static String[] GENDER_ARR ={59 "男",60 "女"

61 };62 private static DateFormat DATE_FORMATER = newSimpleDateFormat(63 "yyyy年MM月dd日");64

65 //~ Methods ****************************************************************

66

67 public static Student createStudent(intid) {68 String firstName =getRandomCharFromArray(FIRST_NAME_ARR);69 String lastName =getRandomCharFromArray(LAST_NAME_ARR);70 String name = firstName +lastName;71

72 String gender = GENDER_ARR[new Random().nextInt(1000) % 2];73

74 String birthday =getRandomDate();75

76 return newStudent(id, name, gender, birthday);77 }78

79

80 private staticString getRandomCharFromArray(String[] arr) {81 Random random = newRandom();82 int index =random.nextInt(arr.length);83

84 returnarr[index];85 }86

87 /**

88 * 随机生成一个比当前日期小的日期89 *90 *@return(yyyy年MM月dd日)91 */

92 private staticString getRandomDate() {93 Date date = newDate();94 long dateMill =date.getTime();95

96 Random random = newRandom();97 dateMill = (long) (random.nextDouble() *dateMill);98

99 return DATE_FORMATER.format(newDate(dateMill));100 }101 }

报表设计(iReport)

报表的设计部分就不多说了。

主要说一下,如何使用Java类向报表中传数据。

1、设置classpath

iReport使用JavaBean时使用的是Java的class文件。所以需要制定classpath,让iReport知道到哪去找那些class文件。

工具栏 > Options > Classpath(如果iReport是英文版本,请自己对照),出现下图的界面。

a、点击添加文件夹,找到上面提到的几个Java类的class文件的路径。笔者使用的是Eclipse,而且建的是Java Project,所以笔者的路径是 $workspace\$projectName\bin 。

b、点击Save Classpath。

(注:设置完成后,请重启iReport。有时在视图上的修改不能及时显示,可以多试几次。还是显示不出来,重启吧!不知道是不是iReport的bug。笔者使用的版本是2.0.1)

2、设置数据源

工具栏 > Data > 连接/资料来源。

在弹出的界面中,点击New按钮。

在接下来弹出的界面中,选中JavaBeans set data source,点击Next。

出现如下图的界面。

a、Name,给你的datasource取个名字,例如:MyJavaBeanTest

b、Factory class,就是上面的工厂类,包括包名和Java文件名

c、method,工厂类里的那个静态方法。注意方法名要对应。名字可以任取。

3、向报表填充值

工具栏 > Data > 报表查询,出现如下界面。

a、选中JavaBean Data Source选项卡。

b、在Class name栏里,填入JavaBean类,包括包名和Java文件名。

c、点击Read attributes。可以看到下面的栏里显示出了JavaBean的属性。

d、选中相关属性,点击Add Selected Field(s)。

e、点击OK。

经历过上面的步骤,可以看到在你的报表文件的视图中,Fields栏里多了刚刚加上的属性。

将各属性拖放到相应的位置。如图。

好了。看看效果吧!

在菜单栏里,点击执行报表(使用动态连结),如图。

如果配置了多个数据源的话,请注意动态连结的数据源是否正确。

预览效果如下:

P.S. 其中的Java源代码和iReport的报表文件(jrxml)已打包上传到网上。有兴趣的可以看看。

ireport java 变量_iReport —— 使用 JavaBean 作为数据源相关推荐

  1. 万能的Entry,两个变量的Model/JavaBean再也不用写了!

    2019独角兽企业重金招聘Python工程师标准>>> 前言 很多时候传数据需要只含两个变量的Model/JavaBean,但就为了两个变量去写一个Model/JavaBean实在是 ...

  2. j2ee 引入java类_J2EE学而时习之——JavaBean

    一. javabean 是什么? Bean的中文含义是"豆子",顾名思义,JavaBean是指一段特殊的Java类,只有有默然构造方法,只有get,set的方法的java类的对象. ...

  3. 在JSP中调用JAVA类和使用JavaBean有什么区别?

    在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean   />调用Jav ...

  4. (转)在JSP中调用JAVA类和使用JavaBean有什么区别?

    在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean   />调用Jav ...

  5. Java数据类型及变量作业_day02、Java变量与数据类型

    02_Java变量与数据类型 第二章 变量与数据类型 变量 变量的概述 变量是指内存中的一个存储区域,该区域要有自己的名称(变量名).类型(数据类型),该区域的数据可以在同一数据类型的范围内不断变化值 ...

  6. NDK开发 - C/C++ 访问 Java 变量和方法

    上一篇有提到 JNI 访问引用数组,涉及了 C/C++ 访问 Java 实例的方法和变量.虽然在之前的开发中,并没有用到 C/C++ 范围 Java 层数据,但是这部分内容还是很有用的. 传送门:ND ...

  7. java 变量与常量_详解Java变量与常量

    一.常量 用final修饰(也称最终变量) 常量在声明时必须赋初值,赋值后不能再修改值 常量名通常用全大写字母表示 声明时需要添加final或static final类型修饰符,例如: private ...

  8. 【JVM】Java变量的种类(提高版)

    · Java变量按数据类型分,有:①基本数据类型:②引用数据类型: · Java变量按声明位置分,有:①成员变量:②局部变量: 见下图: 一.按数据类型分 1.1.基本数据类型 8种基本数据类型是Ja ...

  9. 怎么在js中取java变量的值

    通过<%=java变量%>的方式赋值给js变量. 1.定义一个java变量 <%String a = "222";//定义一个string类型的java变量 %& ...

  10. java不可变量有哪些_5.Java变量

    5.Java变量 所有的程序都使用变量临时存储各种数据, 在Java语言中变量必须在程序中被定义(或声明)后才能使用, 必须为每个变量确定一个具体类型.Java中变量分为基础类型变量和引用类型变量. ...

最新文章

  1. 初识C语言---(3)
  2. 贪吃蛇程序 php,php,函数 Web程序 - 贪吃蛇学院-专业IT技术平台
  3. [C#]统计文本文件txt中的行数(快速读取)
  4. PHP操作mongodb数据库操作类
  5. 找一份好工作真的很难?是的,很难。
  6. Hbuilderx编辑器介绍(00)
  7. 计算机一级b必背知识点,全国计算机等级考试B经典必考资料_知识点总结.doc
  8. outlook邮箱显示一直启动中_[转载]Outlook 2016 显示正在启动... 无法进入Outlook的解决方案...
  9. android tf卡检测工具,检测SD卡真假!安卓App一键识破SD卡真伪
  10. vscode通过ssh远程连接服务器
  11. 电路分析题目详解(四)
  12. 世界33种名车标志及来历
  13. 单行子查询返回多个行
  14. 【我的新书】一步一步学SpringBoot 2:微服务项目实战
  15. 驾驭你的“职场布朗运动”---转载
  16. 猿辅导python资源_2020猿辅导(小猿搜题)高中辅导全资源合集百度网盘下载
  17. 猿辅导 x DorisDB:构建统一OLAP平台,全面升级数据分析能力
  18. sql盲注二分法注入脚本
  19. 【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法
  20. 建筑信息化模型BIM经典《BIM Handbook》中文翻译第一章第二节(持续更新)

热门文章

  1. 百度地图室内路线规划
  2. VS2013 配置wincap开发环境
  3. 关于模拟信号和数字信号的储存
  4. Java获取本机外网ip地址的方法
  5. 简单PHP会话(session)说明
  6. Beyond 比对工具
  7. 女孩子取什么名字好听又独特?自己家的宝宝就要个好名字
  8. 移动端事件touchstart、touchmove、touchend详解
  9. java 量化指标_SAR指标配合阶段高低价的量化交易策略
  10. windows11 截屏键无法使用 Print screen