ireport java 变量_iReport —— 使用 JavaBean 作为数据源
在制作報表時,想直接使用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 作为数据源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何设置电脑启动项
- 下一篇: ireport分组打印