使用Jasperreport作爲報表控件開發胖客戶端報表應用

1、

概述

我們對第一部分的內容做個簡要的回憶,第一部分主要是介紹使用iReport如何製作一個數據報表,我認爲文章比較詳細的介紹“如何從零到滿足大部分需求報表出現”。但是文中沒有涉及Jasperreport的任何內容,目的是讓你純粹的理解如何做報表,因爲做報表和把報表內嵌到應用程序編程是可以分工的,便於整合也便於分解。

我們知道iReport是一個Jasperreport的前端開發工具,iReport用來製作和預覽報表,爲應用使用報表提供足夠的前端支持。現在簡要的介紹Jasperreport是如何工作的,這樣你可以更好的理解iReport是如何幫助Jasperreport實現前端的工作,其實這些工作在我們看來就是“髒活”,爲什麼呢?看看下面的資料就知道了。


         通過上圖你大概已經明白Jasperreport的工作原理了。首先是要有一個XML文件(一般是以jrxml後綴),那麼這個XML文件從那裏來呢?做 什麼用呢? 這個XML文件就是報表的定義文件,整個報表的每一個細節都在這個XML文件之中定義,一個簡單報表的xml文件就有幾百行,你可以手工編輯這個XML文 件(一行一行,一段一段的編輯吧――這就是所謂的“髒活”)。如果是手工製作這個XML文件,單從效率上考慮就不允許,特別是現在很多應用系統的開發時間 變得越來越緊張,總是會在時間上出問題。節省時間最好的辦法就是充分的利用自動化工具,詹姆斯.馬丁的軟件工程思想也是反覆的強調過程的自動化,如何做到 自動化呢?就是充分的利用自動化工具集成到開發流程,說了一大堆不就是爲了說要用iReport來做報表嗎!這是我們第一部分已經完成的工作,但是這裏重 要的是理解Jasperreport的工作原理。

2、結合Jbuilder開發胖客戶端報表應用

2.1、建立Application

參考Jbuilder有關資料。只要是普通Window窗口應用即可。

2.2、引入JasperReports需要的庫文件

通過jbuilder9Tool】-【configure Libraries】-按最左邊的【New】-輸入一個名稱,比如Report-【add】按鈕,導航到iReportlib目錄,把lib目錄裏面的所有文件引入。如圖:


按兩次OK回到Jbuilder的開發界面。

2.3、向工程添加Report系列庫文件

通過右擊工程,選擇【properties】-【pathsLabel-【Required LibrariesLabel-【Add】按鈕-選擇“Report”-按兩次OK回到Jbuilder的開發界面。這樣就添加完成了需要的庫文件了。這麼做是比較理想的,但是報表運行時可能不需要iReportlib下所有的jar文件。

2.4、在主界面上添加需要的組件

在主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對象並命名RptDialogRptDialog的代碼如下:

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);

    //創建數據庫的連接,參考javaJDBC編程資料創建連接方式

    CommectionDB conndb = new CommectionDB();

    //注意:這個連接要求與製作報表時使用的連接一致

    Connection conn = conndb.getDbConnection();

    //報表配置參數,前文提過的SQL語句的Where條件參數就是與這裏對應。
 
//條件的值可能是通過多種方式得到的,比如上一個頁面傳遞過來的

    Map parameters = new HashMap();   

    //ProjectName就是iReport的變量$P{ProjectName}的名稱,參考第一部分的5.6添加參數和使用參
proname就是從界面上獲取的值。

 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編程報表程序。希望對你有一點幫助。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章