我們對第一部分的內容做個簡要的回憶,第一部分主要是介紹使用iReport如何制作一個數據報表,我認為文章比較詳細的介紹“如何從零到滿足大部分需求報表出現”。但是文中沒有涉及Jasperreport的任何內容,目的是讓你純粹的理解如何做報表,因為做報表和把報表內嵌到應用程序編程是可以分工的,便于整合也便于分解。
我們知道
iReport
是一個
Jasperreport
的前端開發工具,
iReport
用來制作和預覽報表,為應用使用報表提供足夠的前端支持?,F在簡要的介紹
Jasperreport
是如何工作的,這樣你可以更好的理解
iReport
是如何幫助
Jasperreport
實現前端的工作,其實這些工作在我們看來就是“臟活”,為什么呢?看看下面的資料就知道了。
通過上圖你大概已經明白Jasperreport的工作原理了。首先是要有一個XML文件(一般是以jrxml后綴),那么這個XML文件從那里來呢?做什么用呢? 這個XML文件就是報表的定義文件,整個報表的每一個細節都在這個XML文件之中定義,一個簡單報表的xml文件就有幾百行,你可以手工編輯這個XML文件(一行一行,一段一段的編輯吧――這就是所謂的“臟活”)。如果是手工制作這個XML文件,單從效率上考慮就不允許,特別是現在很多應用系統的開發時間變得越來越緊張,總是會在時間上出問題。節省時間最好的辦法就是充分的利用自動化工具,詹姆斯.馬丁的軟件工程思想也是反復的強調過程的自動化,如何做到自動化呢?就是充分的利用自動化工具集成到開發流程,說了一大堆不就是為了說要用iReport來做報表嗎!這是我們第一部分已經完成的工作,但是這里重要的是理解Jasperreport的工作原理。
2、結合Jbuilder開發胖客戶端報表應用
2.1 、建立 Application
參考
Jbuilder
有關資料。只要是普通
Window
窗口應用即可。
2.2
、引入
JasperReports
需要的庫文件
通過
jbuilder9
【
Tool
】-【
configure Libraries
】-按最左邊的【
New
】-輸入一個名稱,比如
Report
-【
add
】按鈕,導航到
iReport
的
lib
目錄,把
lib
目錄里面的所有文件引入。如圖:
按兩次
OK
回到
Jbuilder
的開發界面。
通過右擊工程,選擇【
properties
】-【
paths
】
Label
-【
Required Libraries
】
Label
-【
Add
】按鈕-選擇“
Report
”-按兩次
OK
回到
Jbuilder
的開發界面。這樣就添加完成了需要的庫文件了。這么做是比較理想的,但是報表運行時可能不需要
iReport
的
lib
下所有的
jar
文件。
在主
Frame
添加一個
Button
和一個
Label
以及一個
TextBox
,當然你也可以通過創建菜單連接,如圖:
這個窗體時用來做測試用的,實際的界面可能很復雜,其中的
TextBox
就是為報表的變量做準備的。這里填寫的值就是要傳遞給報表的變量,也就是第一部分定義的帶
$P{}
符號的變量,程序會把他們對應起來。
Button
的單擊事件代碼如下:
/**
?? * RptDialog
對話框是用來承載報表的顯示。
?? * @param e
?? */
? void jButton1_actionPerformed(ActionEvent e) {
??????
?//
請創建一個對話框類
RptDialog
???? RptDialog dlg = new RptDialog(this.jGroupID.getText());
???? Dimension dlgSize = dlg.getPreferredSize();
???? Dimension frmSize = getSize();
???? Point loc = getLocation();
???? dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
???????????????????? (frmSize.height - dlgSize.height) / 2 + loc.y);
???? dlg.setModal(true);
???? dlg.pack();
???? dlg.show();
? }
RptDialog
是接下來制作的一個
Dialog
對象,通過
Jbuilder
新建一個
Dialog
對象并命名
RptDialog
。
RptDialog
的代碼如下:
import java.awt.*;
import javax.swing.*;
import dori.jasper.engine.*;
import dori.jasper.view.*;
import dori.jasper.engine.util.JRLoader;
import java.sql.Connection;
import java.io.File;
import java.util.Map;
import java.util.HashMap;
import mytest.trac.CommectionDB;
/**
?* <p>Title: RptDialog </p>
?* <p>Description:
報表承載對話框
</p>
?* <p>Copyright: Copyright (c) 2004</p>
?* <p>Company: *****</p>
?* @author
李克喜
?* @version 1.0
?*/
public class RptDialog extends JDialog {
? JPanel ReportPan = new JPanel();
? BorderLayout borderLayout1 = new BorderLayout();
? //Bug
項目名稱
? String proname = "";
? //
顯示報表需要的控件
? JRViewer jrview;
? public RptDialog(String GroupID) {
??? proname = GroupID;
??? try {
????? jbInit();
????? pack();
??? }
??? catch (Exception ex) {
????? ex.printStackTrace();
??? }
? }
? private void jbInit() throws Exception {
??? ReportPan.setLayout(borderLayout1);
??? getContentPane().add(ReportPan);
??? //
裝載報表
,
在
Jbuilder
工程的目錄創建一個
Reports
文件夾,并把報表的
jasper
文件擱置在該文件夾。
??? String reportPath = System.getProperty("user.dir") + "\\Reports\\ BugsRpt.jasper";
??? JasperReport jasperReport =
(JasperReport) JRLoader.loadObjectFromLocation(reportPath);
??? //
創建數據庫的連接,參考
java
的
JDBC
編程資料創建連接方式
??? CommectionDB conndb = new CommectionDB();
????//
注意
:這個連接要求與制作報表時使用的連接一致
??? Connection conn = conndb.getDbConnection();
??? //
報表配置參數,前文提過的
SQL
語句的
Where
條件參數就是與這里對應。
??? Map parameters = new HashMap();???
????//ProjectName
就是
iReport
的變量
$P{ProjectName}
的名稱,參考第一部分的
5.6
添加參數和使用參
?parameters.put("ProjectName ", proname);??
?JasperPrint jasperPrint =
?????????? JasperFillManager.fillReport(
?????????? jasperReport,
?????????? parameters,
?????????? conn
??? );
?? //
裝載過程,注意其中的紅體字部分
?
?jrview = new dori.jasper.view.JRViewer(jasperPrint);
?? ReportPan.setLayout(borderLayout1);
?? ReportPan.setPreferredSize(new Dimension(800, 600));
?? getContentPane().add(ReportPan, BorderLayout.CENTER);
??
ReportPan.add(jrview,null);
? }
}
到這里,所有需要設置和編程的工作基本完成了。
3、
確定數據庫已經啟動了,在
JBuilder
運行應用程序。在
TextBox
輸入有意義的組值,比如“
BugWin
系統”,這是我的測試值,實際情況是根據你的需要來確定的。單擊
Button
,系統會彈出對話框,運行結果和第一部分
6.2
、預覽報表結果一致。
4、
隨著技術的進步,應用環境的不斷變化,胖客戶端的應用可能會逐漸退出主流,但是它的存在是必要的。所以我要寫胖客戶端的應用方面的報表使用技術。文中簡要明了的介紹了如何使用
Jasperreport
編程報表程序。希望對你有一點幫助。
2.3
、向工程添加
Report
系列庫文件
2.4
、在主界面上添加需要的組件
?
//
條件的值可能是通過多種方式得到的,比如上一個頁面傳遞過來的
proname
就是從界面上獲取的值。