rcp實踐
這篇文章基本上是沒怎么加我自己寫的代碼的,幾乎全部是eclipse生成的,本人只是拿這個例子來說說自己的認識,所以里面很多錯誤,看了就把它忘記吧。建議到網站找資料,我想更適合你。 最近發現rcp的資料越來越多,而自己有處于比較有空的狀態,所想寫一篇完整的Rcp教程,由于我也是初學,所以寫出來的很多東西可能都是錯的,所以建議參考一些資料: http://www.eclipse.org/home/categories/rcp.php Eclipse Rcp的官方網站。 http://www-128.ibm.com/developerworks/cn/opensource/top-projects/eclipse.html IBM網站 Eclispe的幫助文檔。 上面的文檔足以幫助我們這些初學者入門。 <!--[if !supportEmptyParas]--> <!--[endif]--> 下面我將以一篇管理用戶的例子來體驗RCP的美妙,此程序基于(jdk1.5+eclipse3.2)。 一.創建序基本框架 二.分析RCP的結構 三.添加程序功能 四.建立數據model,dao,service,action 五.測試 六.打包。 一. 序基本框架,我想Eclipse這點做的是很貼心的,在創建程序框架的時候選擇Email Template。并輸入項目名稱org.wuhua.rcp。然后點下一步就行了。這樣我們創建了帶菜單,工具條等基本模板。
上面的模板我想基本上是適合我們的程序的,不過我們要改進下它們,比如菜單,工具條,跟左側樹狀菜單,這些是我們要改進的,我們要讓它們符合我們的需求。 <!--[if !supportLists]--> 插件清單的學習:重點RCP程序也是一個插件,但跟插件又有點不同(它有自己獨立的工作臺,有自己獨立的透視圖,透視圖在程序啟動時候啟動(可以自己指定相關的透視圖實現)。要注意的是在相同的時間里只能存在一個透視圖),我認為普通插件是構建在Eclipse的工作臺之上的,說白了就是插件要依賴與Eclipse來工作,而RCP則可獨立運行――純粹個人觀點。 在創建了插件項目之后,需要創建透視圖,創建透視圖是一個兩階段的過程。首先,修改插件的清單以包含新的擴展,該擴展將使用 point="org.eclipse.ui.perspectives">
name="Autotest Perspective" class="org.wuhua.autotest.ui.Perspective" id="org.wuhua.autotest.perspective">
上面是對透視圖插件清單的定義,現在我們看下,透視圖在java代碼中是怎么樣構建的,是怎么樣顯示到桌面?看看下面的代碼 java 代碼
IperspectiveFactory指定一個創建透視圖接口,我們只需要實現它即可。程序會在啟動的時候加載這個類,具體是通過plugin.xml里面的擴展點: <!--[if !supportEmptyParas]--> <!--[endif]--> 具體創建透視圖的方法是:
java 代碼
我們可以在里面部署我們的透視圖,比如透視圖開始位置,大小,是否可見等――系統通過傳入IpageLayout 對象,然后通過這個對象來實現上面的功能。 介紹 WorkbenchAdvisor 前面集中討論了構成 RCP 應用程序的各種組件。接下來將集中討論如何將所有的事物結合到一起。在構建 RCP 應用程序時,核心任務之一就是創建一個實現抽象類
<!--[if !supportEmptyParas]--> <!--[endif]--> WorkbenchAdvisor 是個非常重要的類,它負責配置整個工作臺,一個Rcp程序只能存在一個WorkbenchAdvisor(工作臺)實例,但可以存在多個WorkbenchWindowAdvisor實例(工作窗口,相當于打開新窗口)。 現象來詳細看下WorkbenchWindowAdvisor。WorkbenchAdvisor是通過創建WorkbenchWindowAdvisor來實現工作臺的配置的,當然也可以不這么做。它也可以自己創建。但我覺得通過WorkbenchWindowAdvisor創建更靈活而且給人感覺更舒服。 ActionBarAdvisor 這個類是我們用來定制菜單,工具條等。它的方法解釋如下 protected void makeActions(final IWorkbenchWindow window) { //在這里可以通過窗口來定制action,比如文件中的打開,關閉,推出等action。 } protected void fillMenuBar(IMenuManager menuBar) { //定制菜單 } <!--[if !supportEmptyParas]--> <!--[endif]--> Application Rcp核心類,根據API說明,此類是RCP啟動的Main類,里面的run方法相當于普通java程序的main方法。通常這個類是建立RCP應用程序生成,代碼結構基本不用去修改。 java 代碼
我們可以很清楚的知道,線程會在PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());這里不挺的運行,直到程序崩潰或者用戶退出才會返回。 <!--[if !supportEmptyParas]--> <!--[endif]--> 恩。我想我基本上知道rcp是怎么運行的了,我對主管說? 那好啊。你總結下,它是怎么運行的。 首先通過plugin.xml文件配置rcp的各個方面,比如擴展點,需求包等。這個文件就好像spring的bean配置文件,告訴了容器上下文。 “我說的對不對啊,主管。”我跟主管說。 “那MANIFEST.MF這個文件的用途是什么呢?”主管說。 我查查啊。噢,原來是跟OSGI有關的啊,在xx版本的esplise以前,plugin.xml做了全部工作,后來改進了。把一些工作放到MANIFEST.MF這個文件來了。我想它主要對OSGI框架運行的元數據包裝吧,比如定義RCP的運行環境跟依賴項目(有可能是插件)。 <!--[if !supportEmptyParas]--> <!--[endif]--> 對了我們基本上算是了解了RCP的一些基本只是,我現在想了解下,我點擊那些菜單的時候為什么會有反映的,它是怎么做到的? 那么我們試驗下吧。經過查找API我們發現了Iaction,字面上怎么跟webwork的action差不多啊。因為根據名稱我們知道action具體是做什么的。它也是一個Command模式的經典應用嗎? 我想是的。看看它的方法 java 代碼
這就更清楚了。我們只要繼承Action并覆蓋它的run方法就可以實現點擊的動作了。哈哈。Eclispe我太喜歡你了, 好我們自己來定義實現一個Action吧。
java 代碼
上面只是我對rcp一點認識,如果要想設計好rcp我覺得除了對這些基本知識要有了解外,對swt/jface也是要有充分的認識的。 |