




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
EclipseRCP應用系統(tǒng)開發(fā)經(jīng)濟管理學院 信息管理教研室陳岡
領先的、高水準的開發(fā)技術, 盡在EclipseRCP!
有一種聲音如是說!北大青鳥APTECHJ2EE高級講師鄔繼成: 結合2006年11月底去西安招聘的經(jīng)歷,我發(fā)現(xiàn)許多學校并沒有開設Java、.Net的課程,而是以C/C++居多。我不是說C/C++不重要,但也不能無視一個事實:Java和.Net相關的職位,比C/C++的職位要多得多。是不是人才,市場說了算。例如我們公司,主要是J2EE技術為主,但這次招的人中,根本上沒有人會用Java。不可否認,很多公司期望畢業(yè)生“一來就能干活”,更多不會JAVA的畢業(yè)生被拒之門外。
大學教育里,除了素質(zhì)教育外,如何進行有針對性的“謀生技能教育”,是一個很現(xiàn)實的問題。當然,咱們的畢業(yè)生同學們,不可能等到大學教育改革完成再就業(yè)。 其實,大多數(shù)公司做的事,都不是造神六,沒有那么復雜的科學原理和技術。即使是神六這樣的尖端科技,也是要講究簡單的?;艚鹪凇稌r間簡史》中說:“插入任何一個數(shù)學公式都會使作品的銷量減半。”諾貝爾們?nèi)缡钦f,咱們IT的從業(yè)者,又憑什么說不是呢?其實,許多當前流行的技術,從“應用”的角度來看,都是很簡單的,甚至可以稱之為“快餐技術”。初學者不需要知道太多底層的原理——至少現(xiàn)在不需要。他們關心的是:如何盡快學會使用一種技術,并找到一份工作。引言之1:信息技術開展之語言、IDE篇
掌握一些編程語言可讓您在職場競爭中收放自如,而扎實的技巧將會讓您炙手可熱。
1開發(fā)語言1.1問天下幾多英雄PHP
根本描述:一種開源,工作在效勞器端,跨平臺,使用HTML腳本的語言,因為可置入HTML頁面,因此尤其適用于網(wǎng)頁制作。
學習理由:使用十分廣泛。借助緩存高速調(diào)用腳本,并使用編譯代碼插件來增強效果是今后趨勢所在。使用C或COBOL創(chuàng)立Web應用程序是不可行的。
相關工作指數(shù):1152JavaScript
根本描述:請不要與Java混淆,JavaScript是一種面對對象的腳本變成語言,它運行在客戶端的Web瀏覽器上。它比Java更簡潔,擁有簡化的命令,易用的代碼,并且無需進行編譯。
使用理由:它可置入HTML,被用于大量的網(wǎng)頁來驗證表格,建立cookie,偵測瀏覽器以及提高設計。由于其易于學習與使用廣泛,已被視為重要的學習背景。
相關工作指數(shù):4406Pascal
根本描述:原本是世界上流行的一種適合于教學的語言。培養(yǎng)編程思想和思路。
使用理由:Borland公司的Delphi開發(fā)平臺的語言。由于其易于學習,還有Delphi的廣泛使用,已被視為重要的學習語言。
相關工作指數(shù):5406Perl
相關描述:Perl是一種開源跨平臺、運行在效勞器端的解釋語言,在CGI程序中被大量用于處理文字。
學習理由:Perl在處理大量文字方面的能力使得其非常流行,且廣泛用于寫入多任務的網(wǎng)絡效勞器程序。Duquaine說:“如果您正在從事網(wǎng)絡應用程序的工作,那么學習某種腳本語言〔如Perl或PHP〕是十分有必要的?!?/p>
相關工作指數(shù):4810C
根本描述:一種標準化的通用編程語言,它是最普及的語言之一,也是多種其它語言〔如C++〕的根底。
學習理由:Duquaine說:“學習C是相當重要的。在學習了C后,跳躍到Java或C#就變得十分容易,因為許多語法是通用的。另外,許多C語言的語法也被用于腳本語言?!?/p>
相關工作指數(shù):6164〔包括所有衍生工作〕Python
根本描述:一種動態(tài)面對對象的翻譯開源語言。使用動態(tài)存儲管理。
學習理由:Python是一種高度可讀的抽象語言,許多開發(fā)人員認為其非常有趣,它的語法簡單,因此被Google與學術界大量運用。
相關工作指數(shù):811VB.Net(VisualBasic.Net)
根本描述:一種面向對象的語言,在微軟.Net框架中使用。
學習理由:最具爭議的是VB.Net目前是否為最流行的且是幾種必須掌握的語言之一。Huckaby說:“VB.Net目前是被廣泛優(yōu)先采用語言之一的。” 相關工作指數(shù):6506新生代迭起,群雄逐鹿,天下紛爭AJAX(同步JavaScript與XML)
根本描述:雖然從技術上來說,這并非一種編程語言,但是AJAX使用XHTML或HTML,JavaScript以及XML來建立互動網(wǎng)絡應用程序。
學習理由:自從Google企圖將AJAX應用到地圖上,對AJAX知識的需求不斷膨脹。圣地亞哥的軟件工程公司Interknowlogycom的CEOHuckaby說:“對AJAX知識需求相當大,因為它很難掌握?!蔽④涀罱暦Q將發(fā)布一個名為Atlas的工具來幫助AJAX更容易被實施。Huckaby說:“如果微軟的Atlas工具獲得成功,它將會給普通工作者帶來極大的復雜性和困擾。”
相關工作指數(shù):1106RubyandRubyonRails
根本描述:Ruby是一種動態(tài)的面向對象的開源語言。Rails上的Ruby那么是一種使用Ruby編寫的開源網(wǎng)絡程序框架,該框架與MVC〔模型-查看-控制〕結構十分類似。
學習理由:由于簡便性,有效性以及讓電腦完成任務的能力,近年來,該語言的使用量已經(jīng)迅速增長。另外的好處是非常容易學習。
相關工作指數(shù):2105Java
根本描述:一種面向對象的變成語言,由JamesGosling和其SunMicrosystems的同事共同開發(fā)。
學習理由:被許多開發(fā)人員所擁戴,被成為“美麗的”語言。它適用于沒有.net編程經(jīng)驗的人員。Duquaine說:“如果您不是微軟產(chǎn)品的使用者,那么學習Java必不可少。”
相關工作指數(shù):14408C#
根本描述:一種通用編輯,面向對象的編程語言,由微軟作為其.net方案的一局部開發(fā)而成,包含C和C++。
學習理由:是.Net框架的根底局部。Duquaine說:“如果您大量使用Microsoft的產(chǎn)品,那么學習C#是十分有必要的?!?/p>
相關工作指數(shù):51111.2基于本錢、學習性、健壯性選擇人不可能兩次踏進同一條河流。理論是灰色的,現(xiàn)實是彩色的。翻車的往往是跑得快的。1.3留給我們的思考引言之2:DE概述一、浪花淘盡英雄1.VisualBasic夕陽無限好,只是近黃昏!2.Delphi沒落的奇跡!3.PowerBuilder廉頗老矣,尚能飯否?4.VisualC++經(jīng)典還能延續(xù)多久?5.JBuilder變革迫在眉睫?!二、想說愛你不容易傳統(tǒng)IDE開發(fā)工具:PB、VB、Delphi、VC等。高度集成的環(huán)境難以實現(xiàn)模塊化設計難以動態(tài)化構建系統(tǒng)模塊的組織繁雜模塊難以復用和擴展系統(tǒng)復雜度高三、長江后浪推前浪1.VisualStudio在競爭中催生?2.DeveloperWorkbench別具一格?另類?3.NetBeans與Eclipse難分伯仲?4.Eclipse一統(tǒng)江湖任我行?5.JDeveloper挑戰(zhàn)Eclipse?引言之3:新面孔、新特色新IDE特點:以先進架構為根底支持混合開發(fā)容易集成第三方工具易用、擴展性強廣泛支持參考書目1.Addison..Oct.20052.Addison.Wesley..Mar.20063.陳岡.EclispeRCP應用系統(tǒng)開發(fā)方法與實戰(zhàn).電子工業(yè)出版社.互動出版網(wǎng):第1章什么是EclispeRCP?1.1Eclipse簡介 目前Eclipse受到空前關注,國內(nèi)外許多軟件公司紛紛開始采用Eclipse作為開發(fā)平臺。那么,什么是Eclipse?Eclipse能給我們帶來什么?1.1.1Eclipse的起源和開展Eclipse的前身是IBM的VisualAge。1998年11月IBM成立了一個工程開發(fā)小組,開始開發(fā)一個開發(fā)工具,2000年新一代開發(fā)工具誕生,這就是大家所熟悉的Eclipse。IBM于2001年12月向世界宣布了兩件事:第一件事是捐贈價值4千萬美元的Eclipse源碼給開源社區(qū);另外一件事是成立由成員公司組成的Eclipse協(xié)會〔EclipseConsortium〕 Eclipse受到廣泛關注,蜂擁而至的用戶使得其下載效勞器一度阻塞,給業(yè)界帶來了久違的震撼! IBM趁熱打鐵,在EclipseCon2004上宣布成立一個獨立的非盈利性的基金會,由該基金會負責管理和指導Eclipse開發(fā),目前其成員多達近百家知名公司,其中包括Borland、Rational
Software、Red
Hat、Sybase、Google和Oracle等業(yè)界巨頭。Eclipse目前成熟穩(wěn)定的版本是3.3,正在開發(fā)的版本是3.4,現(xiàn)在已經(jīng)成為業(yè)內(nèi)主要的非微軟軟件工具平臺。1.1.2Eclipse的優(yōu)勢 目前全球有上百萬人在使用Eclipse進行開發(fā)。為什么Eclipse擁有如此眾多的擁躉?這與Eclipse集眾多特性于一身有很大關系。Eclipse是開放源代碼的軟件。Eclipse是真正地可擴展并可配置的。Eclipse支持眾多的開發(fā)語言而不僅僅是Java。Eclipse提供了對多重平臺特性的支持。基于業(yè)界領先的OSGi標準。OSGi標準最早由SunMicrosystems、IBM、愛立信等于1999年推出,其效勞平臺包括:效勞網(wǎng)關、汽車、移動、工業(yè)自動化、建筑物自動化、PDA網(wǎng)格計算、娛樂〔如iPronto〕和IDE等。Eclipse美輪美奐的人機界面受到廣泛贊譽。Eclipse由業(yè)界領先者推出,具有強大的行業(yè)力量。1.2EclipseRCP1.2.1 EclipseRCP平臺 RCP是基于Eclipse工程的一個開發(fā)富客戶端應用的框架,目的在于為開發(fā)人員提供一種功能強大的、快速的、可擴展的應用平臺。1.2.2什么是RCP RCP是RichClientPlatform的縮寫。RichClient大概在20世紀90年代初期開始使用,其經(jīng)典的開發(fā)工具有VisualBasic和Delphi。類似于VB、Delphi這樣的可視化開發(fā)環(huán)境使得開發(fā)富客戶端程序變得簡單而有趣味,相信這是很多人的體會。但是,狼來了!1.2.3EclipseRCP的優(yōu)勢EclipseRCP具有以下優(yōu)點:組件化。便利性。RCP可以在嵌入式設備、掌上電腦上運行。Eclipse也可以說是“RCPeverywhere”。智能安裝和升級??梢酝ㄟ^HTTP、Web站點、復制等多種方式進行在線安裝和更新??蓴U展性。本地觀感及使用體驗。連線與脫線操作。
EclipseRCP橫空出世,有望扭轉Java在桌面應用的頹勢,而不僅僅是4千萬美元的問題!
1.2.4EclipseRCP的應用 國外已經(jīng)有大量應用EclipseRCP開發(fā)的工程,比較著名有:美國國家航空航天管理局(NASA)的火星探測方案工程。新版的IBMWorkplace開發(fā)平臺。新版的JBuilder。新版的Flash9。寶馬轎車的控制系統(tǒng)。 國內(nèi)RCP應用也逐漸開展和壯大起來,越來越多的工程開始采用EclipseRCP開發(fā),如電信、金融、醫(yī)藥、電力系統(tǒng)等行業(yè)已經(jīng)開始應用EclipseRCP開發(fā)的桌面系統(tǒng)了。可以預見,EclipseRCP具有非常廣闊的開展前景。
國外一個開源的EclipseRCP軟件。該軟件是一個在線股票交易系統(tǒng),能夠進行股價的實時查看、歷史數(shù)據(jù)瀏覽、數(shù)據(jù)分析等功能。
國外一個商業(yè)EclipseRCP軟件。該軟件主要應用于醫(yī)學領域,幫助小兒科醫(yī)生進行日常工作的更新管理。
本課程將要實現(xiàn)的一個系統(tǒng)本課程主要內(nèi)容實現(xiàn)例如系統(tǒng)根本框架。配置EclipseRCP環(huán)境。SWT/Jface簡介Hibernate數(shù)據(jù)持久化用戶登錄系統(tǒng)托盤處理。氣泡式提示文本。自定制安裝程序。 更多精彩內(nèi)容,敬請關注電子工業(yè)出版社《EclipseRCP應用系統(tǒng)開發(fā)方法與實戰(zhàn)》一書!本課程主要涉及的軟件1。。2。。3。Derby10.2數(shù)據(jù)庫。4。
SQLExplorer2.2。5。NSIS2.24。
6。Hibernate3.2。全部為免費軟件!第
2章安裝與配置開發(fā)環(huán)境2.1安裝JDK
最新版本為JDK6??紤]到普遍性,這里使用JDK5。其下載地址為:
2.2Eclipse的下載安裝 可以到Eclipse官方網(wǎng)站下載:。 也可以直接在瀏覽器地址欄輸入:查看全部Eclipse版本。2.3配置本地ApacheDerby數(shù)據(jù)庫引擎2.3.1ApacheDerby簡介1997年美國Cloudscape公司推出了Cloudscape。1999年Informix收購了Cloudscape公司。2001年,Informix又被IBM收購,IBM將Cloudscape作為其多達70多種產(chǎn)品中內(nèi)嵌的數(shù)據(jù)庫引擎。2004年,IBM將Cloudscape數(shù)據(jù)庫軟件捐贈給Apache基金會。 隨著Sun公司的參加,以及IBM的強大投入,這進一步強化了ApacheDerby數(shù)據(jù)庫的光明前景。2.3.2ApacheDerby的特色占用內(nèi)存少、多用戶、標準驅動的關系數(shù)據(jù)庫系統(tǒng)?;谏虡I(yè)數(shù)據(jù)庫內(nèi)核。零管理。可嵌入也可獨立。容易學習使用。2.3.3ApacheDerby的安裝配置1.ApacheDerby的下載下載地址為。其最新版本為10.2。
如果作為單獨的數(shù)據(jù)庫效勞器使用,需要下載。
假設需要在Eclipse里面與Derby打交道,那么需要下載和。2.ApacheDerby的配置創(chuàng)立文件夾c:\eclipse_plugins〔文件夾名任意〕,創(chuàng)立子文件夾derby_plugin\eclipse。將解壓后得到的plugins文件夾拷貝到derby_plugin\eclipse里面。將解壓后得到的plugins文件夾下面的全部內(nèi)容拷貝到derby_plugin\eclipse\plugins下面。在Eclipse安裝目錄下創(chuàng)立一個文件夾links,在該文件夾中創(chuàng)立一個純文本文件derby_plugin.link〔文件名任意〕,用記事本翻開,輸入內(nèi)容: path=c:\\eclipse_plugins\\derby_plugin3.創(chuàng)立數(shù)據(jù)庫使用命令行工具ij,輸入connect'jdbc:derby://localhost:1527/testDB;create=true';注意不要忘了最后的分號。上述命令將創(chuàng)立數(shù)據(jù)庫testDB。2.4使用SQLExplorer插件
1.SQLExplorer簡介 在開源社區(qū)中,SQLExplorer插件享有很高的知名度,使用者很多。SQLExplorer官方下載網(wǎng)站為:, 目前最新版本3.0只能在Eclipse3.2以后版本中使用。2.SQLExplorer的安裝在c:\eclipse_plugins下創(chuàng)立文件夾SQLExplorer\eclipse解壓下載得到的文件,將解壓后得到的文件夾下面的features和plugins文件夾拷貝到c:\eclipse_plugins\SQLExplorer\eclipse下面。然后在c:\eclipse\links文件夾下面新建文本文件SQLExplorer.link,輸入path=c:\\eclipse_plugins\\SQLExplorer即可。3.創(chuàng)立數(shù)據(jù)庫連接參加JDBC驅動程序。選擇Eclipse菜單【W(wǎng)indow】→【Preferences…】,彈出“Preferences”對話框。展開“SQLExplorer”,選擇“JDBCDrivers”。配置JDBC驅動信息。單擊【Add】按鈕,彈出“CreateNewDriver”對話框。在Name文本框中輸入“ApacheDerby”,在ExampleURL文本框中輸入“jdbc:derby://localhost:1527/<databaseName>”,DriverClassName下拉列表框中輸入“”。單擊“ExtraClassPath”頁框,再單擊【Add】按鈕,依次添加derby.jar、derbyclient.jar和derbynet.jar這三個文件。新建連接即可。4.創(chuàng)立Users數(shù)據(jù)表CREATETABLEUSERS(IDINTGENERATEDALWAYSASIDENTITY(STARTWITH1,INCREMENTBY1),USERNAMEVARCHAR(8)NOTNULL,PASSWORDVARCHAR(8)NOTNULL,USERTAGCHAR(1)WITHDEFAULT'0',LATESTLOGTIMETIMESTAMPWITHDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(ID));
第
3章構造系統(tǒng)主程序
創(chuàng)立RCP工程。定制開發(fā)平臺和目標平臺。定制窗口屬性。添加菜單和工具欄。實現(xiàn)主界面透視圖、視圖。實現(xiàn)系統(tǒng)托盤。定時自動顯示托盤氣泡提示文本。品牌化應用程序。3.1新建RCP工程3.1.1創(chuàng)立經(jīng)費測算工程3.1.2工程的組織結構1.srcsrc文件夾存放了工程的源程序,那么編譯后的class文件在哪兒?工程組織結構中并沒有列出,實際保存在bin文件夾下。2.JRESystemLibrary該文件夾存放系統(tǒng)類庫文件。3.Plug-inDependences 該文件夾存放插件依賴類庫文件??梢哉归_看看,當前工程需要哪些插件才能正常運行。4.MANIFEST.MF MANIFEST.MF文件對當前插件〔工程〕進行描述,并可定義與其他插件的關系,也就是插件的元數(shù)據(jù)。該文件一般不需要修改。5.pertiesperties用來配置插件的編譯信息,即定義與工程打包時〔構建〕相關的屬性定義。6.plugin.xml定義插件的擴展點〔Extensionpoint〕。3.1.3RCP根本框架一個根本的RCP應用程序已經(jīng)搭建起來,探究一下RCP的根本框架對于理解RCP大有好處。從前面可以看出,Eclipse已經(jīng)自動生成了Application.java、ApplicationActionBarAdvisor.java、ApplicationWorkbenchAdvisor.java、ApplicationWorkbenchWindowAdvisor.java、Perspective.java這5個類文件。有必要對這5個文件進行分析,以便更深刻地理解RCP的根本框架。在分析之前,先來簡單理解一下幾個根本概念。1.根本概念1)
Display應用程序一般只需要一個Display對象,該對象實際上代表了底層圖形系統(tǒng)的實現(xiàn)。應用程序主窗口翻開之后,才可以通過一個被稱作Shell的對象獲得。Display對象的獲得方法:Displaydisplay=newDisplay();或者:Displaydisplay=Display.getCurrent();。2)
Shell每一個窗口都有一個Shell對象。Shell對象代表了與用戶交互的窗口框架,并處理與窗口關聯(lián)的諸如移動、改變大小等常見行為。Shell對象的獲得方法:Displaydisplay=Display.getCurrent();Shellshell=newShell(display);或者:Shellshell=Display.getCurrent().getActiveShell();3)
WorkbenchWorkbench是工作臺,通俗地說就是代表用戶界面的UI元素。工作臺上有各種窗口、圖標、按鈕和控件。獲得工作臺對象的方法:
IWorkbenchwb=PlatformUI.getWorkbench();工作臺對象有兩個方法也許有用:
wb.restart()。關閉應用程序并立即重新啟動。
wb.close()。正常關閉應用程序。
4)
Advisor Advisor是建議者。Eclipse提供了3種類型的Advisor:
WorkbenchAdvisor。應用程序級別,Eclipse3.0開始引入的全新類。每一個應用程序只有一個Workbench,WorkbenchAdvisor負責該工作臺生命周期的管理,例如啟動、關閉工作。
WorkbenchWindowAdvisor。窗口級別。每一個窗口都有一個WorkbenchWindowAdvisor實例。WorkbenchWindowAdvisor負責具體窗口生命周期的管理。
ActionBarAdvisor。窗口級別。每一個窗口都有一個ActionBarAdvisor實例。ActionBarAdvisor負責管理窗口的菜單欄、狀態(tài)欄、工具欄的外觀和行為。5)
View和Editor 在EclipseRCP應用程序中,用戶主要是通過視圖〔View〕和編輯器〔Editor〕與程序交互。6) Perspective Perspective透視圖,RCP應用程序是通過透視圖對窗口內(nèi)容進行安排和布局的,應用程序都有一個默認的透視圖,。 默認情況下,初始布局包含了一個可視的編輯區(qū)。當然,該編輯區(qū)也可以關閉。2.類文件分析1)Application.java
Application是RCP應用程序的入口。Application主要代碼如下:Application.javaimport…publicclassApplicationimplementsIPlatformRunnable{ publicObjectrun(Objectargs)throwsException{ Displaydisplay=PlatformUI.createDisplay(); try{ intreturnCode=PlatformUI.createAndRunWorkbench(display,newApplicationWorkbenchAdvisor()); if(returnCode==PlatformUI.RETURN_RESTART){ returnIPlatformRunnable.EXIT_RESTART; } returnIPlatformRunnable.EXIT_OK; }finally{ display.dispose(); } }}2)ApplicationWorkbenchAdvisor.java ApplicationWorkbenchAdvisor類負責應用程序生命周期管理。開發(fā)人員可以在該類中實現(xiàn)程序啟動或者關閉時的某種處理。該類的具體實現(xiàn)只是給用戶一個初始的視圖界面而已,還需要配合WorkbenchWindowAdvisor、ActionBarAdvisor才能構成一個較為完整的用戶界面。import…publicclassApplicationWorkbenchAdvisorextendsWorkbenchAdvisor{ privatestaticfinalStringPERSPECTIVE_ID=".jfcs.perspective";publicWorkbenchWindowAdvisorcreateWorkbenchWindowAdvisor(IWorkbenchWindowConfigurerconfigurer){returnnewApplicationWorkbenchWindowAdvisor(configurer);}publicvoidinitialize(IWorkbenchConfigurerconfigurer){super.initialize(configurer);
configurer.setSaveAndRestore(true);} publicStringgetInitialWindowPerspectiveId(){ returnPERSPECTIVE_ID; }}3)ApplicationWorkbenchWindowAdvisor.java ApplicationWorkbenchWindowAdvisor類負責應用程序窗口生命周期的管理。 每一個應用程序都需要一個WorkbenchWindowAdvisor來控制窗口界面的UI元素。開發(fā)人員可以控制窗口創(chuàng)立時的大小、標題、位置等等,也可以添加創(chuàng)立、翻開、復原或關閉工作臺窗口時調(diào)用的方法import…publicclassApplicationWorkbenchWindowAdvisorextendsWorkbenchWindowAdvisor{publicApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurerconfigurer){super(configurer);}publicActionBarAdvisorcreateActionBarAdvisor(IActionBarConfigurerconfigurer){returnnewApplicationActionBarAdvisor(configurer);}publicvoidpreWindowOpen(){IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer();configurer.setInitialSize(newPoint(700,550));configurer.setShowCoolBar(false);configurer.setShowStatusLine(false);configurer.setTitle("jfcs");}}
4)ApplicationActionBarAdvisor.java ApplicationActionBarAdvisor.java類負責定義窗口的行為,該類擴展自ActionBarAdvisor。具體的說,該類用于構建菜單欄、工具欄和狀態(tài)行。ActionBarAdvisor自然是負責菜單欄、工具欄和狀態(tài)行的創(chuàng)立和注冊。import…publicclassApplicationActionBarAdvisorextendsActionBarAdvisor{privateIWorkbenchActionintroAction; publicApplicationActionBarAdvisor(IActionBarConfigurerconfigurer){ super(configurer); } protectedvoidmakeActions(IWorkbenchWindowwindow){ introAction=ActionFactory.INTRO.create(window); register(introAction); } protectedvoidfillMenuBar(IMenuManagermenuBar){ MenuManagerhelpMenu=newMenuManager("&Help",IWorkbenchActionConstants.M_HELP); menuBar.add(helpMenu); helpMenu.add(introAction); }}
5)Perspective.javaPerspective類主要負責界面布局的安排。Perspective.java代碼如下:import…publicclassPerspectiveimplementsIPerspectiveFactory{ publicvoidcreateInitialLayout(IPageLayoutlayout){ StringeditorArea=layout.getEditorArea(); layout.setEditorAreaVisible(false); layout.setFixed(true); //以后參加各種視圖 }}3.1.4定制應用程序窗口屬性
1.閃屏畫面 應用程序主界面顯示之前往往可能要做一些初始化處理工作,也就是啟動時間可能稍微長一些,如果沒有任何提示,用戶可能感到困惑,閃屏畫面能夠較好地解決這個問題。準備一幅24bit色BMP格式的圖片,圖片大小不要超過500x300。將自己的圖片拷貝到工程下面替換掉原來的splash.bmp即可。2.不保存窗口狀態(tài)首先,將ApplicationWorkbenchAdvisor.java的initialize()方法中:configurer.setSaveAndRestore(true);修改為:configurer.setSaveAndRestore(false);。前文說過,設置為true,應用程序須得每次退出時保存窗口狀態(tài),此處并不需要且對性能有輕微影響,所以設置為false。3.定制窗口式樣在ApplicationWorkbenchWindowAdvisor.java的preWindowOpen()方法中定制窗口式樣:publicvoidpreWindowOpen(){ IWorkbenchWindowConfigurerconfigurer=getWindowConfigurer(); //窗口設定為800x600 configurer.setInitialSize(newPoint(800,600)); configurer.setShowCoolBar(false);//暫時不顯示工具欄
configurer.setShowStatusLine(true);//顯示狀態(tài)欄
//窗口只顯示最小化、關閉按鈕
configurer.setShellStyle(SWT.MIN|SWT.CLOSE); //設置窗口標題
configurer.setTitle("高校經(jīng)費測算系統(tǒng)");}處理自定義常量:新建一個包,在該包下新建接口IAppConstants.java,該接口代碼類似于以下形式:package.jfcs.sys;publicinterfaceIAppConstants{ publicstaticfinalStringAPPLICATION_TITLE="高校經(jīng)費測算系統(tǒng)";}
為什么這樣處理?4.窗口自動居中 publicvoidpostWindowOpen(){ //設置窗口自動居中
Shellshell=getWindowConfigurer().getWindow().getShell(); RectanglescreenSize=Display.getDefault().getClientArea(); RectangleframeSize=shell.getBounds(); shell.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2); }
5.設置視圖標題欄的弧線形外觀翻開ApplicationWorkbenchAdvisor.java文件,修改initialize()方法代碼如下:publicvoidinitialize(IWorkbenchConfigurerconfigurer){super.initialize(configurer);configurer.setSaveAndRestore(false);PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,false);}3.2定制開發(fā)平臺和目標平臺 目標平臺是應用程序運行的根底平臺,開發(fā)平臺是開發(fā)RCP的根本環(huán)境〔IDE〕。3.3添加菜單和工具欄
3.3.1Action簡介Action就是動作,也就是單擊菜單。方法一:privateIWorkbenchActionexitAction;exitAction=ActionFactory.QUIT.create(window);方法二:開發(fā)者自定義的Action,需要擴展Action類,例如:importorg.eclipse.jface.action.Action;publicclassAboutSystemextendsAction{ publicAboutSystem(){…… } publicvoidrun(){ …… }}
3.3.2創(chuàng)立系統(tǒng)Action 首先在工程下創(chuàng)立文件夾icons,Eclipse中icons文件夾用于保存工程各種圖片文件,請不要更換文件夾名稱。 根據(jù)需要創(chuàng)立Action。那么,圖片文件如何處理?
可以新建一個專門存放圖片文件名的接口文件:package.jfcs.sys;public
interfaceIImageKey{
public
static
finalStringICONSPATH="icons/";
public
static
finalStringWELCOME=ICONSPATH+"welcome.gif";
public
static
finalStringABOUT_SYSTEM=ICONSPATH+"aboutSystem.gif";
public
static
finalStringDATA_BAK=ICONSPATH+"dataBak.gif";}
3.3.3創(chuàng)立系統(tǒng)菜單創(chuàng)立菜單首先需要makeActions(IWorkbenchWindow)方法創(chuàng)立好相應的菜單動作,然后由fillMenuBar()方法完成菜單項的創(chuàng)立。下面是創(chuàng)立菜單的代碼:publicclassApplicationActionBarAdvisorextendsActionBarAdvisor{ //根底數(shù)據(jù)菜單:公共參數(shù)設置、教學單位情況 privateActionpublicData,teachUnitData,calcDataMenu,graphicsData; publicApplicationActionBarAdvisor(IActionBarConfigurerconfigurer){super(configurer);}
//生成Action對象 protectedvoidmakeActions(IWorkbenchWindowwindow){ publicData=newPublicData(); register(publicData); teachUnitData=newTeachUnitData(); register(teachUnitData); }
//生成Action對象 protectedvoidfillMenuBar(IMenuManagermenuBar){ MenuManagerbaseDataMenu=newMenuManager("根底數(shù)據(jù)[&B]","baseDataMenu"); baseDataMenu.add(publicData); baseDataMenu.add(teachUnitData); MenuManagercalcDataMenu=newMenuManager("測算數(shù)據(jù)[&C]","calcDataMenu"); menuBar.add(calcDataMenu); calcDataMenu.add(graphicsData); }}3.3.4創(chuàng)立系統(tǒng)工具欄工具欄管理器負責工具欄的分類管理,下面是創(chuàng)立工具欄的代碼:protectedvoidfillCoolBar(ICoolBarManagercoolBar){ IToolBarManagertoolBar=newToolBarManager(SWT.FLAT|SWT.SHADOW_OUT); coolBar.add(toolBar); toolBar.add(publicData); toolBar.add(teachUnitData); toolBar.add(newSeparator()); toolBar.add(historyData); toolBar.add(graphicsData); …… }3.4添加主界面視圖
〔1〕 創(chuàng)立包;〔2〕 雙擊plugin.xml,切換到Extensions頁。單擊【Add…】按鈕,彈出“NewExtension”對話框。選中ExtensionPoints列表中的,單擊【Finish】按鈕;〔3〕 在上單擊鼠標右鍵,選擇【New】→【View】;〔4〕 創(chuàng)立教學單位視圖。在id后輸入,name后輸入“教學單位”,class后輸入,icon選擇icons/teachUnitNameView.gif,allowMultiple選擇false〔不允許翻開該視圖的多個實例〕,然后保存,如下圖;〔5〕 生成TeachUnitName.java。單擊圖中的class鏈接,彈出“NewJavaClass”對話框,直接單擊【Finish】按鈕即可自動創(chuàng)立類文件。 各視圖的ID號如何處理較好?3.5配置透視圖
修改包的Perspective.java,完整代碼如下:package.jfcs.app;importorg.eclipse.ui.IPageLayout;importorg.eclipse.ui.IPerspectiveFactory;import.jfcs.sys.IAppConstants;
publicclassPerspectiveimplementsIPerspectiveFactory{ publicvoidcreateInitialLayout(IPageLayoutlayout){ StringeditorArea=layout.getEditorArea(); layout.setEditorAreaVisible(false); layout.setFixed(true); //參加教學單位視圖 layout.addStandaloneView(IAppConstants.TEACH_UNIT_NAME_VIEW_ID,true, IPageLayout.LEFT,0.26f,editorArea); layout.getViewLayout(IAppConstants.TEACH_UNIT_NAME_VIEW_ID).setCloseable(false); layout.getViewLayout(IAppConstants.TEACH_UNIT_NAME_VIEW_ID).setMoveable(false); //參加經(jīng)費概覽視圖 layout.addStandaloneView(IAppConstants.PIE_DIAGRAM_VIEW_ID,true, IPageLayout.BOTTOM,0.72f,IAppConstants.TEACH_UNIT_NAME_VIEW_ID); layout.getViewLayout(IAppConstants.PIE_DIAGRAM_VIEW_ID).setCloseable(false); layout.getViewLayout(IAppConstants.PIE_DIAGRAM_VIEW_ID).setMoveable(false); //參加教學單位課程明細視圖 layout.addView(IAppConstants.TEACH_UNIT_CLASS_VIEW_ID,IPageLayout.RIGHT,0.74f,editorArea); layout.getViewLayout(IAppConstants.TEACH_UNIT_CLASS_VIEW_ID).setCloseable(false); layout.getViewLayout(IAppConstants.TEACH_UNIT_CLASS_VIEW_ID).setMoveable(false); }}3.6實現(xiàn)系統(tǒng)托盤
將程序最小化到Windows托盤,是一項有趣而且實用的工作。程序啟動后自動最小化到Windows托盤,如圖5-15所示。即使用戶關閉程序,用戶也可以隨時通過托盤翻開程序,非常方便。3.6.1托盤對象簡介實現(xiàn)程序托盤首先需要獲得Windows托盤對象,托盤對象可以通過Display對象的getSystemTray()方法取得,其代碼如下:Traytray=window.getShell().getDisplay().getSystemTray();注意:托盤對象的創(chuàng)立應該是在能夠獲得Display對象之后而程序窗口又沒有翻開之前,即ApplicationWorkbenchWindowAdvisor的postWindowOpen()方法中。 然后,向托盤對象中添加托盤工程TrayItem,并設置托盤工程的文字、圖標。托盤工程及其圖標應該在程序退出時銷毀以釋放資源。托盤工程創(chuàng)立方法如下: TrayItemtrayItem=newTrayItem(tray,SWT.NONE); trayItem.setImage(trayImage); trayItem.setToolTipText("文字說明"); 最后,需要添加托盤工程的事件監(jiān)聽處理,主要有兩種:一種是用戶單擊托盤圖標時需要翻開程序,其監(jiān)聽事件為: trayItem.addListener(SWT.Selection,newListener(){ publicvoidhandleEvent(Eventevent){ //恢復程序界面 } });另外一種是用戶右鍵單擊托盤圖標時需要彈出菜單,其監(jiān)聽事件為:
trayItem.addListener(SWT.MenuDetect,newListener(){ publicvoidhandleEvent(Eventevent){//處理代碼} });
最后還有一個問題,當用戶關閉程序時不能關閉托盤圖標。這需要覆寫ApplicationWorkbenchWindowAdvisor的preWindowShellClose()方法。
3.6.2系統(tǒng)托盤的具體實現(xiàn)
〔1〕 創(chuàng)立管理托盤的類HookSysTray.jfcs.sys/HookSysTray.javaimport…publicclassHookSysTray{ privateTrayItemtrayItem; privateImagetrayImage; publicHookSysTray(){} publicvoidcreateSysTray(finalIWorkbenchWindowwindow){ trayItem=initTrayItem(window); if(trayItem!=null){ trayPopupMenu(window); trayMinimize(window); } } //最小化程序窗口
publicvoidwindowMinimized(finalShellshell){ shell.setMinimized(true); shell.setVisible(false); } //最小化程序到托盤
privatevoidtrayMinimize(finalIWorkbenchWindowwindow){ window.getShell().addShellListener(newShellAdapter(){ publicvoidshellIconified(ShellEvente){ window.getShell().setVisible(false); } }); trayItem.addListener(SWT.Selection,newListener(){ publicvoidhandleEvent(Eventevent){ Shellshell=window.getShell(); if(!shell.isVisible()){ shell.setVisible(true); window.getShell().setMinimized(false); } } }); }
//托盤彈出菜單
privatevoidtrayPopupMenu(finalIWorkbenchWindowwindow){ trayItem.addListener(SWT.MenuDetect,newListener(){ publicvoidhandleEvent(Eventevent){ MenuManagertrayMenu=newMenuManager(); Menumenu=trayMenu.createContextMenu(window.getShell()); fillTrayItem(trayMenu,window); menu.setVisible(true); } }); }
//構造托盤菜單項
privatevoidfillTrayItem(IMenuManagertrayItem, finalIWorkbenchWindowwindow){ ActionexitSystem=newAction("退出系統(tǒng)[&E]",AbstractUIPlugin .imageDescriptorFromPlugin(IAppConstants.APPLICATION_ID, IImageKey.EXIT_SYSTEM)){ publicvoidrun(){ PlatformUI.getWorkbench().close(); } }; trayItem.add(newLogoff()); trayItem.add(exitSystem); }
//初始化托盤工程的文字和圖標 privateTrayIteminitTrayItem(IWorkbenchWindowwindow){ finalTraytray=window.getShell().getDisplay().getSystemTray(); if(tray==null) returnnull; trayItem=newTrayItem(tray,SWT.NONE); trayImage=AbstractUIPlugin.imageDescriptorFromPlugin( IAppConstants.APPLICATION_ID,IImageKey.WINDOW_IMAGE) .createImage(); trayItem.setImage(trayImage); returntrayItem; } publicvoidDispose(){ if(trayItem!=null) trayItem.dispose(); if(trayImage!=null) trayImage.dispose(); }}〔2〕 修改ApplicationWorkbenchWindowAdvisor類首先定義一個HookSysTray對象:privateHookSysTrayhookSysTray;添加用于創(chuàng)立hookSysTray對象的createSystemTray()方法: privatevoidcreateSystemTray(){ hookSysTray=newHookSysTray(); hookSysTray.createSysTray(getWindowConfigurer().getWindow()); }修改postWindowOpen()方法,在該方法中調(diào)用createSystemTray()創(chuàng)立系統(tǒng)托盤: publicvoidpostWindowOpen(){ ... createSystemTray(); }覆寫preWindowShellClose()方法,防止關閉程序時關閉托盤: publicbooleanpreWindowShellClose(){ hookSysTray.windowMinimized(getWindowConfigurer().getWindow().getShell()); returnfalse; }退出時釋放資源: publicvoiddispose(){ hookSysTray.Dispose(); }3.7品牌化應用程序添加啟動畫面、設置窗口圖標、指定EXE文件圖標、定制歡送畫面、添加啟動進度條等等。3.7.1新建產(chǎn)品配置產(chǎn)品配置用于定義和管理EclipseRCP產(chǎn)品的多個方面特征。3.7.2定制EXE文件默認情況下生成的EXE文件名為eclipse.exe,這自然不理想。現(xiàn)在將默認生成的文件名EXE修改為jfcs.exe。單擊“Launcher”頁,在LauncherName后的文本框中輸入“jfcs”即可。 修改默認生成的EXE文件的圖標:ResourceHacker,://angusj/resourcehacker。設置啟動進度條和窗口圖標 在閃屏畫面中出現(xiàn)進度提示是非常友好的應用程序啟動方式。
第
4章SWT/JFace簡介一個RCP系統(tǒng)注定需要豐富的圖形用戶界面以方便用戶操作。4.1SWT/JFace概述
SWT:StandardWidgetToolkit主要用于在Java上開發(fā)圖形用戶界面。受到廣泛贊譽。一個美觀、能夠快速響應的人機界面,有利于提升軟件品質(zhì),對于一個軟件系統(tǒng)來說非常重要!Sun公司的AWT/Swing飽受業(yè)界批評。JFace是根植于SWT之上的一個更易用、功能更強大的圖形包。4.2創(chuàng)立Java工程
提示:有一個商業(yè)版本的功能強大的可視化SWT/JFace開發(fā)工具SWTDesigner,可以到其官方網(wǎng)站下載試用版本。
4.3創(chuàng)立SWT/JFace應用程序創(chuàng)立SWT應用程序 在包下〔除非特別指明,后面的例如默認都創(chuàng)立在該包下,不再說明〕創(chuàng)立應用程序HelloWorld,代碼如下:packagercpbook.swtjface.sample;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Shell;public
classHelloWorld{
public
static
voidmain(String[]args){
finalDisplaydisplay=Display.getDefault();
finalShellshell=newShell(); shell.setSize(500,375); shell.setText("HelloWorld!"); shell.open();
while(!shell.isDisposed()){
if(!display.readAndDispatch()) display.sleep(); }display.dispose(); }}
4.3.2創(chuàng)立JFace應用程序JFace應用程序與SWT應用程序是有差異的。新建類HelloWorld2,代碼如下:packagercpbook.swtjface.sample;importorg.eclipse.jface.window.ApplicationWindow;importorg.eclipse.swt.widgets.Display;importorg.eclipse.swt.widgets.Shell;publicclassHelloWorld2extendsApplicationWindow{ publicHelloWorld2(){ super(null);} publicstaticvoidmain(Stringargs[]){ try{ HelloWorld2window=newHelloWorld2(); window.setBlockOnOpen(true); window.open(); Display.getCurrent().dispose(); }catch(Exceptione){e.printStackTrace();} } protectedvoidconfigureShell(Shellparent){ parent.setText("HelloWorld!"); parent.setSize(500,375); }}4.4常用組件4.4.1標簽〔Label〕標簽Label是非常簡單的組件,用來顯示信息,其構造函數(shù)為:Label(Compositeparent,intstyle)下面是創(chuàng)立標簽的例如: newLabel(shell,SWT.NONE).setText("姓名"); Labellabel=newLabel(shell,SWT.BORDER); Label.setText("籍貫");//創(chuàng)立一條豎線 Labelseparator=newLabel(shell,SWT.SEPARATOR); separator.setSize(2,shell.getSize().y);代碼中的shell自然是放置標簽的容器,因為組件是需要裝在容器里面的,由容器負責組件在界面的布局安排。4.4.2文本框〔Text〕文本框Text用于輸入數(shù)據(jù),其構造函數(shù)為:Text(Compositeparent,intstyle)下面是創(chuàng)立文本框的例如: newLabel(shell,SWT.NONE).setText("用戶名"); newText(shell,SWT.BORDER).setTextLimit(10); newLabel(shell,SWT.NONE).setText("密\b碼"); Textpwd=newText(shell,SWT.BORDER); pwd.setTextLimit(10); pwd.setEchoChar('*');4.4.3按鈕〔Button〕按鈕Button的構造函數(shù)為:Button(Compositeparent,intstyle)。例如:newButton(shell,SWT.PUSH).setText("退出");newButton(shell,SWT.CHECK).setText("足球");newButton(shell,SWT.CHECK).setText("電影"); finalButtonbutton=newButton(shell,SWT.NONE); button.setText("查詢");4.4.4組合框〔Combo〕組合框Combo的構造函數(shù)為:Combo(Compositeparent,intstyle)。例如:String[]city={"湖北武漢","湖南長沙","江西南昌","江蘇南京","浙江杭州","河南鄭州", "廣東廣州","廣西南寧"};Combocombo=newCombo(shell,SWT.DROP_DOWN|SWT.READ_ONLY);combo.setItems(city);4.4.5列表框〔List〕列表框List的構造函數(shù)為:List(Compositeparent,intstyle)。例如:String[]city={"湖北武漢","湖南長沙","江西南昌","江蘇南京","浙江杭州","河南鄭州", "廣東廣州","廣西南寧"}; Listlist=newList(shell,SWT.BORDER|SWT.MULTI|SWT.V_SCROLL); for(inti=0,n=city.length;i<n;i++){ list.add(city[i]); } list.select(0);4.4.6綜合例如下面是一個綜合了上述組件的例如程序CommonControlSample.java:packagercpbook.swtjface.sample;
importorg.eclipse.swt.SWT;importorg.eclipse.swt.layout.GridLayout;importorg.eclipse.swt.widgets.*;
publicclassCommonControlSample{ publicstaticvoidmain(String[]args){ finalDisplaydisplay=Display.getDefault(); finalShellshell=newShell(); shell.setSize(300,240); shell.setText("常用組件"); shell.setLayout(newGridLayout(4,false)); createContents(shell); shell.open(); while(!shell.isDisposed()){ if(!display.readAndDispatch()) display.sleep(); } display.dispose(); }
private
static
voidcreateContents(Shellshell){
newLabel(shell,SWT.NONE).setText("用戶名");
newText(shell,SWT.BORDER).setTextLimit(10);
newLabel(shell,SWT.NONE).setText("密\b碼"); Textpwd=newText(shell,SWT.BORDER); pwd.setTextLimit(10); pwd.setEchoChar('*');
newButton(shell,SWT.PUSH).setText("退出");
newButton(shell,SWT.CHECK).setText("足球");
newButton(shell,SWT.CHECK).setText("電影");
finalButtonbutton=newButton(shell,SWT.NONE); button.setText("測試按鈕"); String[]city={"湖北武漢","湖南長沙","江西南昌","江蘇南京","浙江杭州","河南鄭州","廣東廣州","廣西南寧"}; Listlist=newList(shell,SWT.BORDER|SWT.MULTI|SWT.V_SCROLL);
for(inti=0,n=city.length;i<n;i++){ list.add(city[i]); } list.select(0); Combocombo=newCombo(shell,SWT.DROP_DOWN|SWT.READ_ONLY); combo.setItems(city); }}
4.5常用布局管理器4.5.1FillLayout填充式
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專利設備維修合同范本
- 圖書館半包裝修合同樣本
- 垃圾運輸合規(guī)審查合同
- 2025年度夫妻雙方共同贍養(yǎng)父母責任書
- 2025年度委托付款方資金劃撥代付協(xié)議
- 2025年度吊車施工安全責任及保險協(xié)議
- 2025年度化妝品品牌全國銷售渠道拓展合同
- 環(huán)保辦公解決方案助力企業(yè)綠色發(fā)展
- 2025年度航空航天合作入股協(xié)議書
- 垃圾分類處理運輸合同模板
- 高中課程表模板1
- tlc-jc dy001通信用高頻開關電源系統(tǒng)檢驗報告模板va
- 閥門噪聲計算程序(IEC)(帶公式)
- 2022年RDA5807m+IIC收音機51單片機C程序上課講義
- 雅馬哈貼片機_修機_調(diào)機的經(jīng)驗之談1
- 全自動咖啡機基本結構及原理教程課件
- 金屬風管支架重量計算表
- 正負零以下基礎施工方案(44頁)
- 簡愛人物形象分析(課堂PPT)
- 義務教育《勞動》課程標準(2022年版)
- 從業(yè)務骨干到管理者(課堂PPT)
評論
0/150
提交評論