基于JFreeReport報(bào)表設(shè)計(jì)器的實(shí)現(xiàn)技術(shù)_第1頁(yè)
基于JFreeReport報(bào)表設(shè)計(jì)器的實(shí)現(xiàn)技術(shù)_第2頁(yè)
基于JFreeReport報(bào)表設(shè)計(jì)器的實(shí)現(xiàn)技術(shù)_第3頁(yè)
基于JFreeReport報(bào)表設(shè)計(jì)器的實(shí)現(xiàn)技術(shù)_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于報(bào)表設(shè)計(jì)器的實(shí)現(xiàn)技術(shù)        摘要報(bào)表始終是所有信息系統(tǒng)中不可或缺的內(nèi)容,尤其是在國(guó)內(nèi)的應(yīng)用系統(tǒng)中,報(bào)表更是占據(jù)著相當(dāng)重要的地位。本文提出了一個(gè)基于JFreeReport報(bào)表設(shè)計(jì)器的設(shè)計(jì)方案,并給出了基于Swing的實(shí)現(xiàn)過(guò)程。在設(shè)計(jì)過(guò)程中主要使用了Swing、XML持久化保存、MVC設(shè)計(jì)模式、軟件工程等技術(shù)。 關(guān)鍵詞JFreeReport;報(bào)表生成;設(shè)計(jì)模式;XML持久化保存 1 基于JFreeReport報(bào)表背景與簡(jiǎn)介 信息化過(guò)程中需要處理大量的有關(guān)多維數(shù)據(jù)集的信息,而表現(xiàn)數(shù)據(jù)信息處理結(jié)果的一種理想的方

2、式就是數(shù)據(jù)報(bào)表。報(bào)表定義文件是生成復(fù)雜報(bào)表的重要文件,主要描述如何使用指定的格式生成復(fù)雜的報(bào)表,對(duì)于JFreeReport定義數(shù)據(jù)報(bào)表格式所需的XML文件通常是由人工輸入編寫的,對(duì)于格式較為簡(jiǎn)單的報(bào)表還可以接受,但是對(duì)于大型數(shù)據(jù)庫(kù)報(bào)表,數(shù)據(jù)報(bào)表關(guān)系格式復(fù)雜而且字段數(shù)量較多,人工輸入易出錯(cuò)又繁瑣,本文研究的報(bào)表設(shè)計(jì)器就是針對(duì)JFreeReport報(bào)表生成內(nèi)核進(jìn)行開(kāi)發(fā)的。 2系統(tǒng)整體設(shè)計(jì) 2.1系統(tǒng)整體框架與MVC模式 基于Java的Swing技術(shù),設(shè)計(jì)器內(nèi)核使用JFreeReport,用于繪制和輸出各種復(fù)雜的統(tǒng)計(jì)報(bào)表。設(shè)計(jì)器的主要工作是將用戶對(duì)報(bào)表的設(shè)計(jì)意圖通過(guò)報(bào)表生成內(nèi)核的API傳遞至報(bào)表生成

3、內(nèi)核,再將報(bào)表生成的結(jié)果實(shí)時(shí)反饋給用戶。報(bào)表生成后,應(yīng)該能夠持久化保存。此外,根據(jù)當(dāng)前流行的數(shù)據(jù)庫(kù)報(bào)表的功能,系統(tǒng)也要具備將報(bào)表轉(zhuǎn)換成諸如PDF、HTML等其他文件格式的功能。讓用戶對(duì)于事實(shí)數(shù)據(jù)具有全面的分析和了解,增加數(shù)據(jù)流通為企業(yè)帶來(lái)的效益。 為了能夠方便地重用組件并且體現(xiàn)模塊的獨(dú)立性,把整個(gè)系統(tǒng)組件分解組織成11個(gè)類包,只要得到這個(gè)包文件,其他類也可以引用該包中的所有類并使用里面的某些組件。該類包分別為:datasource(數(shù)據(jù)源包),dbutilities(數(shù)據(jù)庫(kù)工具包),io(磁盤操作包),jfdmainfrm(系統(tǒng)主窗體包),reportgenerate(報(bào)表生成包),tools

4、(系統(tǒng)所需的其他工具類),wmvc(MVC包,包含有MVC模式所需的基礎(chǔ)支持類,它是系統(tǒng)的底層基類)。 MVC模式的優(yōu)點(diǎn)在于這種方法鼓勵(lì)重用,而不是重新設(shè)計(jì)。有相同機(jī)理的組件,只要改寫不相同的模型部分,便能制造出不同功效的組件,而不用重新設(shè)計(jì)每個(gè)組件,縮短和減輕了設(shè)計(jì)工作的時(shí)間和難度。因此選擇了MVC設(shè)計(jì)模式作為系統(tǒng)的主體架構(gòu)1。 MVC模式基本實(shí)現(xiàn)過(guò)程為: (1)控制器; (2)控制器新建一個(gè)或多個(gè)視圖對(duì)象,并將它們與模型相關(guān)聯(lián); (3)控制器改變模型的狀態(tài); (4)當(dāng)模型的狀態(tài)改變時(shí),模型將會(huì)自動(dòng)刷新與之相關(guān)的視圖。 Java通過(guò)專門的類Observable及Observer接口來(lái)實(shí)現(xiàn)MV

5、C模式。Model類必須繼承Observable類,View類必須實(shí)現(xiàn)接口Observer。正是由于實(shí)現(xiàn)了上述結(jié)構(gòu),當(dāng)模型發(fā)生改變時(shí),模型就會(huì)自動(dòng)刷新與之相關(guān)的視圖。其UML序列圖可以表示為圖1。 在系統(tǒng)具體實(shí)現(xiàn)時(shí),首先建立視圖類WmvcView,它繼承了Obsever抽象類,重載了update()和updateView()方法。然后構(gòu)造模型類WmvcModel,它繼承自O(shè)bservable抽象類,重載了addView(),deleteView()和notifyViews()方法。通過(guò)addView()方法,模型將實(shí)例化視圖并且將視圖與模型建立關(guān)系。最后創(chuàng)建控制器WmvcControllor類

6、,它實(shí)現(xiàn)了ActionListener和ItemListener兩個(gè)接口,重寫actionPerformed()和itemStateChanged()方法2。至此,系統(tǒng)的MVC框架搭建完成。 最后建立WmvcApp類,它應(yīng)用了單例模式(Singleton)來(lái)保證在整個(gè)系統(tǒng)中只有一個(gè)實(shí)例存在,實(shí)現(xiàn)了類似于VC+中的WinApp機(jī)制。應(yīng)用單例模式的思路是:一個(gè)類能返回對(duì)象一個(gè)引用和一個(gè)獲得該實(shí)例的方法。當(dāng)調(diào)用這個(gè)方法時(shí),如果類持有的引用不為空就返回這個(gè)引用,如果類保持的引用為空就創(chuàng)建該類的實(shí)例并將實(shí)例的引用賦予該類保持的引用;同時(shí)還將該類的構(gòu)造函數(shù)定義為私有方法3。這樣其他處的代碼就無(wú)法通過(guò)調(diào)用該

7、類的構(gòu)造函數(shù)來(lái)實(shí)例化該類的對(duì)象,只有通過(guò)該類提供的靜態(tài)方法來(lái)得到該類的唯一實(shí)例。 2.2系統(tǒng)界面設(shè)計(jì) 整個(gè)主界面采用有限制的多文檔結(jié)構(gòu)。所謂有限制的多文檔結(jié)構(gòu),就是同一時(shí)間內(nèi)只能打開(kāi)一個(gè)文檔的多文檔結(jié)構(gòu)。為什么要這樣設(shè)計(jì)而不直接使用單文檔結(jié)構(gòu)呢?首先,是由于JFreeReport內(nèi)核的限制。目前,JFreeReport只支持一個(gè)報(bào)表對(duì)象在內(nèi)存中,也就是說(shuō)同一時(shí)間只能打開(kāi)一個(gè)報(bào)表文件。因此對(duì)于設(shè)計(jì)器系統(tǒng)來(lái)說(shuō),同一時(shí)間當(dāng)然也只能打開(kāi)一個(gè)文檔。但是JFreeReport是一個(gè)很快的項(xiàng)目,也許它很快就能支持多文檔編輯,為了保持系統(tǒng)的可擴(kuò)展性,所以選擇了多文檔結(jié)構(gòu)。其次,在系統(tǒng)界面中還引入了子菜單的概念

8、,通過(guò)在子窗體上構(gòu)造子菜單,將報(bào)表菜單與系統(tǒng)菜單分離,使得主界面更加簡(jiǎn)約,用戶操作簡(jiǎn)便。 系統(tǒng)界面主要分為以下幾個(gè)區(qū)域: (1)系統(tǒng)菜單:用戶通過(guò)它進(jìn)行保存/打開(kāi)報(bào)表、設(shè)置數(shù)據(jù)源等系統(tǒng)操作; (2)報(bào)表菜單:用戶通過(guò)它對(duì)報(bào)表進(jìn)行格式轉(zhuǎn)換、打印、翻頁(yè)、比例設(shè)置等操作; (3)報(bào)表工具條:提供報(bào)表菜單常用項(xiàng)的快捷操作; (4)編輯瀏覽域:編輯報(bào)表時(shí)實(shí)時(shí)顯示編輯效果; (5)編輯狀態(tài)條:顯示報(bào)表頁(yè)數(shù)等狀態(tài)信息。 報(bào)表元素編輯區(qū):報(bào)表編輯的主要區(qū)域,以分區(qū)域的方式顯示報(bào)表元素的簡(jiǎn)要信息。并提供對(duì)于報(bào)表元素添加、刪除、修改功能的操作方法。 2.3數(shù)據(jù)庫(kù)連接類的設(shè)計(jì) Java的數(shù)據(jù)庫(kù)編程主要使用JDBC類

9、庫(kù)。使用JDBC類庫(kù)進(jìn)行編程,調(diào)用Connection.getConnection()方法時(shí),獲得一個(gè)Connection對(duì)象,并使用正面(Facade)模式來(lái)實(shí)現(xiàn)JDBC編程4。 DbFacade是一個(gè)Facade對(duì)象,它使用execute()和executeQuery()兩種方法執(zhí)行SQL語(yǔ)句。前者執(zhí)行數(shù)據(jù)庫(kù)操作語(yǔ)句,后者執(zhí)行數(shù)據(jù)庫(kù)查詢語(yǔ)句。在DbFacade類中包裝了兩個(gè)對(duì)象,SqlStatement和ConnectionMgr。SqlStatement類主要實(shí)現(xiàn)SQL語(yǔ)句的查詢,ConnectionMgr類實(shí)現(xiàn)了一個(gè)單例(Singleton)模式,用于管理與數(shù)據(jù)庫(kù)的連接。 

10、1         3報(bào)表部件的實(shí)現(xiàn) 3.1報(bào)表表板的定義 為了方便用戶設(shè)計(jì)報(bào)表,系統(tǒng)中的報(bào)表模板是由若干個(gè)表板組成的,而各報(bào)表元素,位于各表板之中。模板、表板、報(bào)表元素。 系統(tǒng)支持的7類表板如下: 頁(yè)眉板(PageHeader)、表眉板(ReportHeader)、組眉板(GroupHeader)、主體板(ItemBand)、組腳板(GroupFooter)、表腳板(ReportFooter)、頁(yè)腳板(PageFooter)等。 3.2報(bào)表編輯的功能 為了實(shí)現(xiàn)報(bào)表的編輯功能,系統(tǒng)將報(bào)表元素組織成一棵元素樹(shù)。所以報(bào)

11、表編輯功能的實(shí)現(xiàn)首先要構(gòu)造元素樹(shù)5。為了完成元素樹(shù)的構(gòu)造,必須設(shè)計(jì)一個(gè)機(jī)制來(lái)識(shí)別報(bào)表中的元素。由于JFreeReport本身定義的報(bào)表元素類型比較簡(jiǎn)單,不便于用戶編輯報(bào)表,對(duì)于JFreeReport的報(bào)表元素類型進(jìn)行了擴(kuò)展。系統(tǒng)中的報(bào)表元素共有5種類型:StringElement(文本元素),它是報(bào)表中最常用的元素類型,分為域綁定型和靜態(tài)型;NumberElement(數(shù)值元素),是一個(gè)域綁定型元素,用于存放數(shù)值格式信息,可以設(shè)置數(shù)值的顯示格式;DateElement(日期元素),屬于域綁定型元素,存放日期信息,且可以設(shè)置日期的顯示格式;ShapeElement(圖形元素),矩形、直線等矢量圖

12、形用圖形元素表示;ImageElement(圖片元素),用于存放外部的圖片。 由于對(duì)JFreeReport的元素類型進(jìn)行了擴(kuò)展,就需要對(duì)元素類進(jìn)行重新設(shè)計(jì)。目前,只有StringElement支持靜態(tài)類型數(shù)據(jù),為了保持系統(tǒng)的可擴(kuò)展性,構(gòu)造了一個(gè)RElementIF接口用于保存元素的類型信息。StringElement、NumberElement和DateElement在JFreeReport中都屬于TextElemet,所以它們都繼承了TextElement類,通過(guò)setDataSourceType()方法來(lái)應(yīng)用不同的格式模版,完成類的擴(kuò)充。在識(shí)別報(bào)表元素時(shí)只需對(duì)RelementIF對(duì)象進(jìn)行i

13、nstanceof運(yùn)算,即可獲知當(dāng)前的報(bào)表元素。圖2展示了系統(tǒng)報(bào)表元素的類設(shè)計(jì)圖。 3.3報(bào)表定義文件的存取 系統(tǒng)的最終目的是自動(dòng)生成JFreeReport的數(shù)據(jù)報(bào)表定義文件,因此有必要將數(shù)據(jù)源信息與數(shù)據(jù)報(bào)表的定義分開(kāi)保存。這樣就可以實(shí)現(xiàn)數(shù)據(jù)與樣式展示的分離。為此,系統(tǒng)引入了工程的概念:將數(shù)據(jù)報(bào)表的樣式定義信息和數(shù)據(jù)源信息分別持久化保存,再用一個(gè)工程文件保存上述兩個(gè)文件的路徑。 JFreeReport提供了報(bào)表定義文件輸出的API方法6,由于數(shù)據(jù)源對(duì)象是一個(gè)JavaBean類,可以使用XMLEncoder和XMLDecoder類庫(kù)方法將其序列化,限于篇幅,源碼不再列出。 4結(jié)語(yǔ) 報(bào)表問(wèn)題是信息

14、化過(guò)程中關(guān)注的一個(gè)焦點(diǎn),它的難點(diǎn)在于實(shí)現(xiàn)客戶化,本文中介紹了一個(gè)基于JfreeReport的報(bào)表生成器的一個(gè)設(shè)計(jì)過(guò)程,并給出了設(shè)計(jì)JFreeReport報(bào)表生成器的關(guān)鍵步驟。目前的系統(tǒng)實(shí)現(xiàn)了JfreeReport主要功能。隨著JFreeReport的系統(tǒng)應(yīng)用范圍擴(kuò)大,還有待于在以下方面完善7: (1) 繼續(xù)加強(qiáng)設(shè)計(jì)器的功能,實(shí)現(xiàn)更豐富的報(bào)表模版(比如子從報(bào)表、套打報(bào)表等),并加強(qiáng)圖表功能。 (2) 設(shè)計(jì)基于JFreeReport的服務(wù)器端,實(shí)現(xiàn)報(bào)表的發(fā)布。 1 Bruce EWampler.Java與UML面向?qū)ο蟪绦蛟O(shè)計(jì)M.北京:人民郵電出版社,2002:127130. 2 Tom Myers,Alexander Nakhimovsky.Java XML編程指南M. 北京:出版社, 2001 :379382. 3 John ODonahue.Java數(shù)據(jù)庫(kù)編程寶典M. 北京:電子工業(yè)出版社,2003 :57

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論