版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、報表設計器開發(fā)摘 要現(xiàn)在是信息社會,各種信息都需要處理并直觀展現(xiàn),如股票,物價等信息都需要通過數(shù)據(jù)報表來展現(xiàn)、分析,因此高質(zhì)量報表軟件系統(tǒng)具有重要的實際意義。 本論文課題研究探索了報表系統(tǒng)的開發(fā)方法與技術,綜合應用Eclipse、 JAVA 、JDBC、SWT/Jface、 RCP、XML、 CSS、DOM4J,IText,POI等先進技術,開發(fā)了基于WEB環(huán)境運行的報表設計器,實現(xiàn)了報表設計、模板生成、報表編輯,報表發(fā)布等基本功能,為進一步開發(fā)實用的報表系統(tǒng)奠定了基礎。 關鍵詞:報表,SWT/Jface,Eclipse,XML,B/S,RCPAbstractNow is the inform
2、ation society, all kinds of information need to be addressed and visual display, such as stock ,prices and other information needed to demonstrate through data reports, analysis, the statements of high-quality software system has important practical significance.This paper statements subject to stud
3、y and explore the system development methods and technology, comprehensive application of Eclipse, JAVA, JDBC, SWT / Jface, RCP, XML, CSS, DOM4J, IText, POI, and other advanced technology, the development of the operating environment based on the statements WEB design , Achieved a report design, tem
4、plate generation, editing statements, issued statements of such basic functions, for the further development of practical system laid the foundation for statements.KEY WORDS: Report,SWT/JFace、Eclipse、XML、B/S、RCP 目 錄第一章 概述11.1 課題背景與意義11.2 報表系統(tǒng)發(fā)展概況2第二章 開發(fā)技術及環(huán)境42.1軟件環(huán)境42.2 主要開發(fā)技術4第三章 系統(tǒng)設計63.1系統(tǒng)體系結構63.2
5、 軟件模塊結構73.3數(shù)據(jù)源與系統(tǒng)文件結構83.3.1 系統(tǒng)數(shù)據(jù)源83.3.2 系統(tǒng)文件結構93.3.3 報表顯示部分文件13第四章 系統(tǒng)實現(xiàn)144.1主要實現(xiàn)算法144.1.1新建報表流程圖144.1.2 新建數(shù)據(jù)源流程圖154.1.3編輯單元格流程圖164.1.4 保存報表流程圖174.1.5 生成電子表格流程圖184.1.6 發(fā)布報表流程圖204.1.7 編輯CSS流程圖214.1.8 生成模板流程圖224.1.9 配置服務器流程圖234.2 系統(tǒng)編碼實現(xiàn)234.2.1 系統(tǒng)的主界面實現(xiàn)234.2.2 新建數(shù)據(jù)源324.2.3 新建報表344.2.4 編輯單元格354.2.5 生成電子表
6、格364.2.6 發(fā)布報表404.2.7 編輯CSS424.2.8 生成模板444.2.9 報表保存454.2.10 配置服務器48第五章 系統(tǒng)典型界面515.1系統(tǒng)主界面515.1.1 編輯視圖界面525.1.2 屬性視圖界面525.1.3 服務器視圖界面535.1.4 數(shù)據(jù)源視圖界面535.2部分功能界面545.2.1 新建報表界面545.2.2 新建數(shù)據(jù)源界面555.2.3 設置CSS界面565.2.4 設置服務器參數(shù)界面575.2.5 設置報表參數(shù)界面585.2.6生成模板界面58第六章 課題總結60致謝62參考文獻63附錄65第一章 概述1.1 課題背景與意義現(xiàn)在是信息社會,各種信息
7、都需要處理并直觀展現(xiàn),如股票,物價等信息都需要通過數(shù)據(jù)報表來展現(xiàn)、分析,因此對高質(zhì)量報表軟件系統(tǒng)的需求非常強烈。報表設計工具是報表系統(tǒng)的重要組成部分,使用報表設計工具,可對企業(yè)以及其他用戶需要的各種報表進行設計,并在報表引擎上運行。報表設計工具的功能包括數(shù)據(jù)源關聯(lián)與訪問、報表繪制、布局繪制、屬性編輯、腳本編輯、圖表編輯、表達式編輯、報表數(shù)據(jù)映射、報表預覽調(diào)試等??赏ㄟ^XML轉(zhuǎn)換技術將報表轉(zhuǎn)換換為PDF、Excel等格式輸出。隨著B/S應用逐步取代C/S,市場上對Web環(huán)境下運行報表的要求日益強烈,C/S時期的報表工具紛紛進行了若干改進與加強,支持B/S結構。這些工具大都是對開源軟件進行包裝改造
8、,基本上有兩種流派:一類來自于FastReport這種基于Delphi的軟件,通過控件方式實現(xiàn)Web報表,進而將報表計算移至服務器上進行,再改進為支持Linux;另一類來自于Jasper的基于Java的開源軟件。這些工具的整體思路還是沿襲了C/S時的方式,仍然是傳統(tǒng)的分組報表的模式,仍然無法解決表樣和大作量的代碼編寫問題,而且使用復雜,不能很好的發(fā)揮其效率,不能利用已有的軟件功能,同時他們都是利用SWING/AWT來開發(fā)的,界面難看。 因此,開發(fā)一個具有B/S結構、能適應中國國情、開源的、使用方便、界面美觀的報表設計器是一個很多用戶直期待的。但是,目前流行的報表軟件產(chǎn)品中
9、,比較適合中國情況的產(chǎn)品還是不多。因此,進行本課題研究,開發(fā)報表設計器軟件,對于開發(fā)適合中國特點的實用報表系統(tǒng),促進企業(yè)與社會信息化,具有很好的實際意義。1.2 報表系統(tǒng)發(fā)展概況信息化的初期階段,計算機作為一種新的生產(chǎn)工具,其主要功能是文字輸出,如文件打印、表格輸出等,相比較手工方式而言,工作效率大大提高。這個時期,用于報表生成的軟件主要是WPS表格、CCED、Excel等文字處理工具,這些工具僅僅是將手工繪制報表的方式改為電子處理方式,未涉及到報表數(shù)據(jù)的集中、共享等處理。更確切地說,這個時期還沒有真正意義上的報表工具。 隨著信息化程度的不斷提高
10、,C/S應用方式逐漸成熟,出現(xiàn)了很多報表工具軟件,最著名的當屬水晶報表和PB的DataWindow。水晶報表在上世紀一直被微軟OEM,成為VB的內(nèi)置報表工具,在微軟的強大支持下,VB龐大的用戶群為水晶報表培養(yǎng)了眾多應用人員并積累了大量成功案例,從而產(chǎn)生了世界第一(用戶量)的報表工具。DataWindow 是 PB 中獲取專利技術的控件,它對數(shù)據(jù)的處理方法相當簡潔,能處理各種顯示格式,快速的報表制作能力深受PB開發(fā)者的喜愛。 這些軟件的基本特征是單數(shù)據(jù)源、條帶式(BAND)分組統(tǒng)計模型,通過控件拖拽方式繪制報表,在不編碼的情況下能完成簡單地行式(分
11、組)報表和單片交叉報表,數(shù)據(jù)集中在數(shù)據(jù)庫中,可以共享。 但這一時期的用戶需求已經(jīng)與前一階段的需求大為不同。用戶希望放在數(shù)據(jù)庫中的數(shù)據(jù)能以自己熟悉的方式展現(xiàn)(復雜的表樣、統(tǒng)計運算等),而這些報表軟件的數(shù)據(jù)模型源于國外的報表習慣,解決復雜表樣的方法并不好,復雜的統(tǒng)計運算也要求開發(fā)人員編寫大量的程序代碼,導致報表開發(fā)時間太長,后期的維護工作量也很大。隨著B/S應用逐步取代C/S,市場上對Web報表的要求越來越強烈,C/S時期的報表工具紛紛進行了若干改進與加強,普遍支持B/S結構,新的報表軟件也如雨后春筍一樣不斷出現(xiàn)。 在報表工具的發(fā)展過程中,還有一類特
12、殊的表格式產(chǎn)品,最著名有ormula1和華表。這種類Excel 的工具,展現(xiàn)能力非常強,但是因為沒有數(shù)據(jù)模型,導致其數(shù)據(jù)處理能力幾乎為零,程序員需要按格編寫代碼往里填數(shù)。相比較分組式報表工具,類Excel工具能徹底解決復雜報表的樣式問題,所以在實際應用中它一直是與分組報表互補的一類產(chǎn)品。SWT/JFACE是Eclipse推出優(yōu)秀的JAVA圖形API。RCP,也就是富客戶端,是在Eclipse3.0之后分離出來的一個平臺。RCP技術其實就是插件開發(fā),可以在一個很小的模板上加入各種插件,擴展性能?,F(xiàn)在RCP已經(jīng)成為Eclipse開源項目的一個亮點,在國際上廣泛的使用大量PCR來開發(fā)桌面應用程序。在
13、RCP平臺上,可以使用Eclipse的插件機制來快速開發(fā)獨立應用的桌面應用,從而輕松擁有Eclipse的界面結構和界面元素,節(jié)省了很多開發(fā)精力。運用SWT/Jface和RCP技術來開發(fā)報表,是當前報表開發(fā)的主流方向。一方面,SWT/Jface可以提供優(yōu)秀的圖形界面,克服JAVA桌面應用界面難看的缺陷;另一方面RCP技術可以提高開發(fā)效率。聯(lián)合運用SWT/Jface和RCP技術,可以開發(fā)出優(yōu)秀的報表產(chǎn)品。第二章 開發(fā)技術及環(huán)境2.1軟件環(huán)境本系統(tǒng)的開發(fā)環(huán)境:操作系統(tǒng): Window server 2003標準版應用服務器: Tomcat5.5開發(fā)平臺:eclipse3.3 ;jdk1.52.2 主
14、要開發(fā)技術SWT/JfaceSWT(Standard Widget Toolkit )是標準控件工具集。Jface意為JAVA face。由于SUN的AWT/SWING技術在與本地界面融合方面存在缺陷,因此IBM開發(fā)了SWT,使得界面風格和本地保持一致。而Jface是SWTa的擴展包,采用MVC的設計模式,使用更加方面。RCPRCP(Rich Client Platform)意為富客戶平臺。在RCP平臺上,可使用Eclipse的插件機制來快速開發(fā)獨立應用的桌面應用,從而輕松擁有Eclipse的界面結構和界面元素,節(jié)省了很多開發(fā)精力。Dom4j Dom4j (Document Object Mo
15、del for JAVA)是一個易用的、開源的庫,用于XML,XPath和XSLT。它應用于Java平臺,采用了Java集合框架并完全支持DOM,SAX和JAXP。Dom4j使用起來非常簡單,效率高。只要了解基本的XML-DOM模型就能使用。POI POI(Point of Interest)意為為興趣點,是JAVA與MS Office交互時用到的第三方JAR,也是開源的,屬于Apache的一個項目,用法簡單。它主要用來讀寫OLE 2復合文檔結構,本系統(tǒng)主要用它來操作EXCEL。IText iText是著名的開放源碼的站點sourceforge一個項目,是用于生成PDF文檔的一個java類庫。
16、通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉(zhuǎn)化為PDF文件。用法很簡單,效率很高。Lomboz lomboz是用來開發(fā)j2ee應用、免費eclipse插件,用它可以大大加快web開發(fā)、部署等工作。第三章 系統(tǒng)設計3.1系統(tǒng)體系結構本系統(tǒng)采用三層B/S架構 ,分別為表示層、設計層和數(shù)據(jù)層,如圖3-1所示。(1) 表示層(Presentation-Tier) 是報表顯示層。本報表系統(tǒng)的表示層有三種類型:Web類型,Excel類型,Pdf類型。(2)設計層(Designer-Tier) 是本報表系統(tǒng)的重中之重。設計層設計的好壞直接影響到報表的使用。其主要任務是建立
17、報表、修改報表、發(fā)布報表、生成模板等。這涉及到報表的數(shù)據(jù)來源,報表的格式,報表輸出,是連接表示層和數(shù)據(jù)層的橋梁。(3)數(shù)據(jù)層(Data-Tier)主要是和用戶有關。本報表系統(tǒng)可以與幾種常用的數(shù)據(jù)庫系統(tǒng)交互。報表中可以輸入的數(shù)據(jù)很多,如圖表、序列號、常量等。數(shù)據(jù)層可以存儲并管理這些數(shù)據(jù)。 圖3-1系統(tǒng)體系結構圖3.2 軟件模塊結構本系統(tǒng)的軟件模塊結構,如圖3-2所示。 圖3-2 系統(tǒng)軟件模塊結構圖圖3-2中各模塊的基本功能如下: 新建報表:設置報表的名字、每頁顯示數(shù)目、選用報表模板;把這些數(shù)據(jù)存到Preferences中,供保存報表使用。 新建數(shù)據(jù)源:設置數(shù)據(jù)源名稱,用它來標識數(shù)據(jù)連接;選擇數(shù)據(jù)
18、庫類型,并設置各種連接參數(shù);進行數(shù)據(jù)源說明;進行連接測試;連接成功后把數(shù)據(jù)源名稱和各種連接參數(shù)保存到dataSource.xml文件中,供以后使用;而數(shù)據(jù)源說明就生成一個文本文件保存。 編輯單元格:設置單元格的數(shù)據(jù),如數(shù)據(jù)源列、函數(shù)、系列號、圖像;設置顏色,字體;設置所對應的行列是否擴展,所對應的行列是否排序。這些都要用一定的格式保存起來,供報表顯示時使用。 保存報表:設置單元格屬性后,保存設置內(nèi)容。先從Preferences讀取報表相關數(shù)據(jù),然后生成報表的xml;遍歷表格,把表格各種信息填到xml中。編輯報表:保存表格后,如覺得不滿意,可以打開報表修改。讀取xml,把相關信息填到相應的單元格
19、。也可以設置報表的每頁的行數(shù)、報表發(fā)布者、發(fā)布時間、報表說明。生成電子表格:電子表格可用來直接發(fā)布,也可用來編輯。先讀取報表xml文件,得到各個單元格的數(shù)據(jù)源,根據(jù)數(shù)據(jù)源不同,得到不同的數(shù)據(jù),并填到相應的電子表格內(nèi)。可以設置電子表格的屬性。發(fā)布報表:先設置發(fā)布目錄,然后把項目文件夾下Files目錄下的名和Preferences中保存相同的,后綴名為xml、xls、css、pdf的文件都復制到發(fā)布目錄下。如發(fā)布目錄已有相同文件,就覆蓋。編輯CSS:CSS決定網(wǎng)頁頁面顯示格式,對報表非常重要。本系統(tǒng)提供一個模板,旁邊還有介紹各種標記的代表的內(nèi)容的提示,這樣用戶就可以自己修改它。修改完后點“確定”,
20、生成報表名+“.css”的樣式文件。生成模板:CSS不是很難,但要做一個好看的格式卻很難,所心有必要把前面生成的CSS文件保存起來,提供下次使用。首先設置模板名字,然后設置說明,點“確定”后,系統(tǒng)會把當前報表的CSS文件復制到模板xml文件,并生成說明的txt文件。配置服務器:配置發(fā)布目錄、端口、最大線程數(shù),以方便使用。3.3數(shù)據(jù)源與系統(tǒng)文件結構3.3.1 系統(tǒng)數(shù)據(jù)源報表就是數(shù)據(jù)的顯示,所以數(shù)據(jù)源很重要。本系統(tǒng)的數(shù)據(jù)源方案如下:(1) 提供建立數(shù)據(jù)源及管理數(shù)據(jù)源的功能。針對不同類型的數(shù)據(jù)庫數(shù)據(jù),建立相應的數(shù)據(jù)源。建立了數(shù)據(jù)源后,就用一個XML文件保存數(shù)據(jù)源信息,以后可直接從XML文件讀取或修改
21、連接信息。(2) 提供對其它類型數(shù)據(jù)源的支持。主要支持EXCEL文件、函數(shù)、系列號、公式等數(shù)據(jù)源。EXCEL文件可以直接解析為WEB格式,而函數(shù),系列號,公式,圖像等可以直接插入。 3.3.2 系統(tǒng)文件結構本系統(tǒng)作為一個桌面應用系統(tǒng),涉及到許多文件系統(tǒng),不管用戶還是開發(fā)者,都有可能容易迷失在文件堆中,所以必須科學管理。為了解決此問題,本系統(tǒng)設計了系統(tǒng)主目錄文件結構,以下是系統(tǒng)主目錄的的文件截圖: 圖3-4 系統(tǒng)主目錄文件結構圖 圖3-4中各文件的功能如下:.metadata文件夾:系統(tǒng)自動生成,保存有日志文件。.setting文件夾: 系統(tǒng)自動生成,用于保存項目的各個參數(shù)。Bin文件夾:存放已
22、經(jīng)編譯過的JAVA的.class文件。DataSource文件夾:存放數(shù)據(jù)源的dataSource.xml文件,其中還有各種.txt文件,用來說明各個數(shù)據(jù)源。該文件夾結構如圖3-5所示: 圖3-5 DataSource文件夾示意圖Files文件夾:用來存放所生成的報表。其中有存放報表信息的xml文件,也有生成為電子表格的.xls文件、pdf文件。當然也存放了報表說明的.txt文件,其結構如圖3-6所示: 圖3-6 Files文件夾示意圖 圖3-6 Files文件夾結構示意圖icons文件夾:用來存放圖象,如按鈕圖標。intro文件夾:系統(tǒng)自動生成。lib文件夾:用來存放第三方JAR包。META
23、-INF文件夾:系統(tǒng)自動生成,里面有MENIFEST.MF,在這個文件里有描述插件各種信息基本信息。src文件夾:是源文件,其結構如下圖所示: 圖3-7 src文件夾示意圖從圖中可知,src文件夾包括兩個包,一個是xautreportdesign包,里面有Activator.java文件,這是RCP的激活類。另一個是com包。其實這個包里有三個子包:com. Xautreportdesign.action,主要用來存放菜單,工具欄動作類的;com. Xautreportdesign.util,主要用來存放一些工具類的,這些工具類對全局都有用;com.Xautreportdesign.win,主
24、要是界面方面的類,有一些是自動生成后我修改的。com. Xautreportdesign.action包中的一部分類如圖3-8所示: 圖3-8 com. Xautreportdesign.action包中文件示意圖com. Xautreportdesign.util包中的類如圖3-9所示: 圖3-9 com. Xautreportdesign.util包中文件示意圖com. Xautreportdesign.win包中類類如圖3-10所示: 圖3-10 com. Xautreportdesign.win包中文件示意圖Template文件夾:是保存模板的文件夾,里面有模板文件.css文件,也有模
25、板說明.txt文件,如圖3-11所示: 圖3-11 Template文件夾示意圖.classpath、.project、perties、javaCompiler.args、plugin.xml、plugin_customization.ini都是系統(tǒng)自動生成的。build.xml:是用ant生成的,為系統(tǒng)打包用。Rduct:是要生成的新產(chǎn)品配置文件。splash.bmp:系統(tǒng)啟動時產(chǎn)閃動畫面使用。3.3.3 報表顯示部分文件對于報表WEB顯示部分,有如下重要文件或文件夾:dataSource文件夾:存放數(shù)據(jù)源文件dataSourece.xml。photo文件
26、夾:存放需要的圖片文件。.css文件:是報表的css文件。report.jsp:是解析保存報表信息的.xml的文件。exceltoweb.jsp:是解析EXCEL并生成WEB的文件。第四章 系統(tǒng)實現(xiàn)4.1主要實現(xiàn)算法4.1.1新建報表流程圖 圖4-1 新建報表算法流程圖 該算法首先判斷是否已有同名的報表,然后判斷行數(shù)是否為數(shù)字,最后存入Preferences中。4.1.2 新建數(shù)據(jù)源流程圖 圖4-2 新建數(shù)據(jù)源算法流程圖 該算法先選擇合適自己的數(shù)據(jù)庫,然后輸入信息,最后連接,看是否成功,若成功就把信息保存起來。4.1.3編輯單元格流程圖圖4-3 新建報表算法流程圖 該算法首先要得到當前鼠標的位
27、置,然后轉(zhuǎn)化為表格的行列,最后選擇數(shù)據(jù)源,并設置單元格屬性。4.1.4 保存報表流程圖 圖4-4 保存報表算法流程圖該算法首先從Preferences中讀取報表相關信息,生成報表名的xml文件。然后遍歷表格,讀取各非空單元格的值及屬性,填入寫入小xml文件中,最后看是否用到模板,如用到,就生成報表名的css文件。生成xml的代碼如下所示:<XautReportFile Name="zainan" tempname="Template" rownum="8" ownerName="楊濟忠" time="
28、;2008年6月3日" intro="true"> <Columns> <Column DataSource="D:zainanDS.ID" Span="縱擴展" Arrange="不排序" Color="RGB 255, 255, 255" Font="Tahoma.8.0">A1</Column> 在XautReportFile中, “Name”代表報表的名字,“tempname”代表報表用到的模板,“rownum”代表
29、WEB頁每頁顯示的行數(shù),“ownerName”代表作者,time代表發(fā)布時間,intro代表是否有說明內(nèi)容。而Columm代表一個單元格,“DataSource”代表數(shù)據(jù)源,里面不同的部分又代表不同的意思:如前面為“D:”,那代表數(shù)據(jù)庫,中間代表前面建的數(shù)據(jù)源的名稱,最后代碼數(shù)據(jù)源的列。如前面是“I:”,那代表常量,后面部分就是常量的值。、如前面是“S:”,那代表系列號,后面代表系列號的一部分。如前面是“F:”,那代表的是函數(shù),后面是函數(shù)?!癝pan”,代表擴展情況。擴展就是其它單元格的值是否依賴這個單元格的值;“Arrange”代表是否排序;“Color”代表是顏色,;“Font”代表字體。
30、而這個單元格的ID是A1。4.1.5 生成電子表格流程圖 圖4-5 生成電子表格算法流程圖 該算法首先從Preferences中得到當前報表名,然后讀取報表XML文件,得到數(shù)據(jù)源名稱。讀取數(shù)據(jù)源XML,遍歷得到數(shù)據(jù)源的各種參數(shù)。用這些參數(shù)連接數(shù)據(jù)庫。用POI創(chuàng)建EXCEL文件。把數(shù)據(jù)庫中數(shù)據(jù)寫入EXCEL文件。4.1.6 發(fā)布報表流程圖 圖4-6 發(fā)布報表算法流程圖該算法首先從Preferences中查看發(fā)布目錄,如有,就復制報表XML到發(fā)布目錄,如沒有,就設置。然后就開始判斷是否有相關文件,如有,就一同復制,因為不復制,就沒有用。4.1.7 編輯CSS流程圖 圖4-7 編輯CSS算法流程圖該
31、算法首先從CSS模板中讀出模板內(nèi)容,并顯示出來,提供用戶修改。修改完成后點確定,從Preferences得當前報表,然后生成報表的CSS文件,如已有相同的就覆蓋。最后把修改后的CSS寫入報表文件。4.1.8 生成模板流程圖 圖4-8 生成模板算法流程圖 該算法首先設置要生成模板的模板名及說明。然后生成模板文件,當然是CSS類型。如模板說明不為空,也生成文件文件類型的說明書。然后從Preferences中得到當前報表,由此得到當前報表的CSS文件,最后把這CSS文件的內(nèi)容寫入模板文件里。4.1.9 配置服務器流程圖 圖4-9 配置服務器算法流程圖 該算法首先讀取服務器配置文件并顯示各個參數(shù),這可
32、以修改。點確定后,就把修改后值寫入配置文件,并更新相關視圖。4.2 系統(tǒng)編碼實現(xiàn)4.2.1 系統(tǒng)的主界面實現(xiàn)本系統(tǒng)采用Eclipse RCP技術,也就是開發(fā)可以獨立運行的Eclipse的插件。運用RCP技術,可以實現(xiàn)與Eclipse一樣友好的界面,可以方便地組裝成一個很強大的系統(tǒng),因為這是采用插件機制。本系統(tǒng)的主界面如圖4-1所示: 圖4-1 報表設計系統(tǒng)主界面圖由圖4-1可以看到,本系統(tǒng)和Eclipse界面有很大的相似性。本系統(tǒng)主要用到了包com.xautreportdesign.win。其中各個類的功能及重要代碼說明如下:Application類:是RCP程序的入口類,RCP程序啟動后第一
33、個執(zhí)行就是它,它負責程序的載入與退出。這個類是建立項目后自動生成的,平常情況不需要修改。ApplicationWorkbenchAdvisor類:是配置工作臺的類,工作臺的初始化就在這完成。這個類是建立項目后自動生成的,可以修改成自己需要的。這個類的部分代碼如下:ApplicationWorkbenchWindowAdvisor類:用來設置窗口。一個工作臺可以有多個窗口,所以可以多個該類的對象。這個類是建立項目后自動生成的,可以修改成自己需要的。下面代碼說明了窗口大小為(700, 550),有工具欄,窗口標題,顯示狀態(tài)欄,生成系統(tǒng)托盤等。以下是該類的部分實現(xiàn)代碼:public void pre
34、WindowOpen() /* 設置窗口初始化的各種屬性 */IWorkbenchWindowConfigurer configurer = getWindowConfigurer();configurer.setInitialSize(new Point(700, 550);configurer.setShowCoolBar(true);configurer.setShowStatusLine(false);configurer.setTitle("報表生成系統(tǒng)");configurer.setShowPerspectiveBar(true);configurer.set
35、ShowStatusLine(true);final IWorkbenchWindow window = getWindowConfigurer().getWindow();/* 創(chuàng)建系統(tǒng)托盤 */trayItem = initTrayItem(window);/* 如果支持系統(tǒng)托盤,則創(chuàng)建托盤的菜單 */if (trayItem != null) createPopupMenu(window); Perspective類:是透視圖類。透視圖是各個視圖,編輯面組成的一個專用的程序界面。本類是項目默認生成,當然也可以寫自己的視圖,只要實現(xiàn)IperspectiveFactory接口。下面就是本透視
36、圖的布局部分代碼,效果如圖4-1所示。public void createInitialLayout (IPageLayout layout) String editorArea = layout.getEditorArea();layout.setEditorAreaVisible(true);layout.setFixed(false);/ layout.addView(View.ID,IPageLayout.LEFT, 0.25f, editorArea);IFolderLayout left = layout.createFolder("left", IPageLa
37、yout.LEFT,0.25f, editorArea);left.addPlaceholder(DatasourceView.ID);left.addPlaceholder(ServerView.ID);layout.getViewLayout(ServerView.ID).setCloseable(false);layout.getViewLayout(ServerView.ID).setMoveable(false);layout.addPlaceholder(editAreaView.ID, IPageLayout.TOP, 0.50f,editorArea);layout.addPl
38、aceholder(AttributeView.ID, IPageLayout.BOTTOM, 0.25f,editorArea);layout.getViewLayout(AttributeView.ID).setCloseable(false);layout.getViewLayout(AttributeView.ID).setMoveable(false);ApplicationActionBarAdvisor類:負責創(chuàng)建和配置工作臺窗口上主菜單,工具欄,狀態(tài)欄等,是報表各種功能模塊相關入口。下面的代碼是用來建立系統(tǒng)托盤項。其中new Separator()是畫一條分隔線,在菜單工具欄中
39、也用到。public void fillTrayItem(MenuManager trayMenu) trayMenu.add(deployAction);trayMenu.add(new Separator();trayMenu.add(exampleAction);trayMenu.add(aboutAction);editAreaView類:是編輯視圖類。視圖相當于一個小窗口,顯示某一方面的內(nèi)容,可以在一個頁面上放置幾個視圖。視圖可通過兩種方式創(chuàng)建:一通過擴展點:修改plugin.xml文件,設置視圖擴展點,在最后一行的</plugin>前加入,下面的代碼說明了擴展點是org
40、.eclipse.ui.views,視圖名字是“編輯區(qū)”,對應的JAVA文件是com.xautreportdesign.win.editAreaView,ID是視圖的標識,為XautReportDesign.EditAreaView。對于其它視圖,都可以這樣創(chuàng)建:<extension point="org.eclipse.ui.views"> <view name="編輯區(qū)" class="com.xautreportdesign.win.editAreaView" id="XautReportDesign
41、.EditAreaView"> </view> </extension> 二通過繼承抽象類ViewPart類,要改寫類中createPartControl,setFocus方法。本視圖實現(xiàn)部分的代碼如下所示:public void createPartControl(Composite parent) createToolbar();if (!isedit) setPartName("編輯" + reportName); elsesetPartName("(未保存)編輯" + reportName);createT
42、able(parent, colnum, rownum); 上面的代碼是實現(xiàn)視圖內(nèi)容,其中最重要的是createTable()方法。這個方法是在視圖中創(chuàng)建類似EXCEL中的表格。下面的代碼創(chuàng)建一個表格,并設置表格的樣式,部分代碼如下:Composite c1 = new Composite(parent, SWT.NONE);c1.setLayout(new FillLayout();table = new Table(c1, SWT.SINGLE | SWT.HIDE_SELECTION| SWT.FULL_SELECTION);table.setHeaderVisible(true);ta
43、ble.setLinesVisible(true);table.setRedraw(true); 對于表格的列號,下面的代碼創(chuàng)建列名從A開始的20個列,其中得把數(shù)字轉(zhuǎn)化為字符型 ,其實現(xiàn)代碼如下: for (int i = 0; i < 20; i+) TableColumn column = new TableColumn(table, SWT.CENTER);column.setText(" " + String.valueOf(char) (65 + i) + " ");column.pack();而對于行號,下面的方法把按鈕附加到每一行的第
44、一列,在按鈕上寫數(shù)字。這樣做的原因是使表格可編輯。實現(xiàn)方法如下:Button b = new Button30;for (int i = 0; i < 30; i+) final TableItem item = new TableItem(table, SWT.NONE);item.setText(i + 1, " ");editori = new TableEditor(table);bi = new Button(table, SWT.PUSH);bi.setText(" " + (i + 1) + " ");editor
45、i.grabHorizontal = true;editori.minimumHeight = bi.getSize().y;editori.minimumWidth = bi.getSize().x;editori.setEditor(bi, item, 0); 編輯是在屬性視圖完成的,所以需完成數(shù)據(jù)綁定。下面代碼的作用是數(shù)據(jù)綁定,它獲取鼠標所在單元格:table.addMouseListener(new MouseAdapter() public void mouseDown(MouseEvent event) Control old = editor1.getEditor();if (o
46、ld != null)old.dispose();Point pt = new Point(event.x, event.y);final TableItem item = table.getItem(pt);if (item != null) int column = -1;for (int i = 0; i <= 20; i+) Rectangle rect = item.getBounds(i);if (rect.contains(pt) column = i;break; 要把表格內(nèi)容填到屬性視圖中相應的組件上,實現(xiàn)的方法是首先得到屬性視圖,其中通過getter()方法得到視圖組
47、件,這樣就可以修改組件的值,同時得到表格單元格的值,用字符串分析技術得到不同的值,并填充到屬性視圖table中。實現(xiàn)代碼如下:final int col = column;/ 數(shù)據(jù)綁定IViewPart vp = getViewSite().getPage().findView(AttributeView.ID);AttributeView av = (AttributeView) vp;Label titleLabel = av.getLabel1();String colId = String.valueOf(table.getSelectionIndex() + 1);titleLabe
48、l.setText("單元格:"+ String.valueOf(char) (64 + column) + colId);Combo combo = av.getCombo();Combo combo11 = av.getCombo11();Combo combo1 = av.getCombo1();Combo combo2 = av.getCombo2();String columnValue = item.getText(column);int i = columnValue.indexOf("", 1);if (i = -1) combo.sel
49、ect(0);combo11.select(0);combo1.select(0);combo2.select(0); else String datasource = columnValue.substring(0, i);if (datasource.startsWith("F:") combo.select(2);combo11.setText(datasource.substring(2); else if (datasource.startsWith("S:") combo.select(1);combo11.setText(datasourc
50、e.substring(2); else if (datasource.startsWith("D:") int n = datasource.indexOf(".");combo.setText(datasource.substring(2, n);combo11.setText(datasource.substring(n + 1); else if (datasource.startsWith("I:") combo.select(0);combo11.setText(datasource.substring(2); else
51、combo.select(0);combo11.setText(datasource); AttributeView類:是屬性視圖類,也就是用來修改單元格的屬性。本視圖的重點工作是編輯單元格屬性,所以工作重點是和編輯視圖交互,部分代碼如下:public void fillInTable(final Composite parent)throws NumberFormatException IViewPart vp = getViewSite().getPage().findView(editAreaView.ID);editAreaView eav = (editAreaView) vp;Ta
52、ble table = eav.getTable();int i = label1.getText().indexOf(":");String tableLocal = label1.getText().substring(i + 1);String colid = tableLocal.substring(0, 1);String rowid = tableLocal.substring(1);char char1 = colid. toCharArray ();int k = char10 - 64;TableItem item = table.getItem(Inte
53、ger.parseInt(rowid) - 1);String valueString = "" if (combo. getSelectionIndex() = 0) valueString = "I:" + combo11.getText() + "" + combo1.getText()+ "" + combo2.getText(); else if (combo. getSelectionIndex() = 1) valueString = "S:" + combo11.getText(
54、) + "" + combo1.getText()+ "" + combo2.getText(); else if (combo.getSelectionIndex () = 2) valueString = "F:" + combo11.getText() + "" + combo1.getText()+ "" + combo2.getText(); else valueString = "D:" + combo.getText() + "." + combo11.getText()+ "" + combo1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 22024版?zhèn)€人理財顧問合同范本:某銀行與客戶理財服務合同
- 2024年設備質(zhì)保服務與支持協(xié)議版
- 2024年道路清障拖車作業(yè)合同規(guī)范文本3篇
- 山洪災害防御知識培訓課件
- 2024音樂素材購買及使用權授權合同:視頻素材
- 2024年零售連鎖店經(jīng)營承包合同范本版B版
- 《技術模板》課件
- 浙江廣廈建設職業(yè)技術大學《大數(shù)據(jù)挖掘技術及其應用》2023-2024學年第一學期期末試卷
- 2024施工合同煙囪施工施工圖紙設計合同3篇
- 2024年環(huán)保設施運營合同3篇
- 2024年國家公安部直屬事業(yè)單位招錄人民警察及工作人員696人筆試(高頻重點復習提升訓練)共500題附帶答案詳解
- 初中必背古詩文138首
- 車站調(diào)度員(技師)技能鑒定理論考試題庫(含答案)
- 2024年房屋交接確認書
- 【深信服】PT1-AF認證考試復習題庫(含答案)
- 反芻動物消化道排泄物原蟲診斷技術規(guī)范
- 開放系統(tǒng)10861《理工英語(4)》期末機考真題及答案(第102套)
- 2024年國家能源集團招聘筆試參考題庫含答案解析
- GB/T 43824-2024村鎮(zhèn)供水工程技術規(guī)范
- 初中地理學法指導課
- 體檢中心質(zhì)控工作計劃
評論
0/150
提交評論