所謂RCP,就是Rich Client Platform的縮寫,即富客戶平台,是Eclipse進化的產物(自3.0版以後出現),是Eclipse組織向使用者提供的強大的開放性開發平台,能 夠使使用者方便地建立自己的基於Eclipse的應用程式,並且這些應用程式能夠得到Eclipse的底層支援。更重要的是,我們可以利用Java建立象 Eclipse這麼漂亮的傳統型程式。
我相信,在未來的幾年裡,RCP一定會變得非常流行。使用RCP,我們可以開發介面象 Eclipse這樣漂亮的傳統型程式,比如醫院管理系統啊、CAD軟體等等。遺憾的是,目前在國內基本上找不到關於RCP的中文資料,我們只能通過自己的探 索來為我們的程式添加我們想要的功能。
下面讓我們一步一步來建立一個Eclipse RCP程式,下面的內容可以說在Google上一搜一大把,有些人會覺得乏味,但是沒關係,這隻是一個快速的起步。
選擇“建立--項目”,選擇“外掛程式項目”:
點下一步,輸入項目名稱,選擇Eclipse版本,我這裡選擇的是3.2:
點下一步,外掛程式標識和外掛程式名稱可以更改,其他的內容都可以保持預設,一定要記得選中富客戶機應用程式支援:
點下一步,選中一個模板,這裡選一個最簡單的,到時候看原始碼的時候便於理解:
點下一步,改一下應用程式標題:
點完成,我們可以在項目上面點右鍵,選擇按Eclipse程式運行,就可以看到效果了:
在這個程式中,視窗上顯示的是一個透視圖,透視圖中含有一個編輯器地區,以後,我們可以逐步為這個程式添加菜單、工具條和為這個透視圖添加視圖、編輯器等等。
現在,這個程式只能在Eclipse環境下運行,而RCP的目標是建立可以獨立啟動並執行應用程式,我們的事情還沒完呢。下一步,在項目上點右鍵,建立產品設定檔:
輸入產品設定檔名:
產生的產品設定檔在編輯器中開啟,應該是這個樣子的:
剛開始,上面的幾個文字框都是空的,點建立按鈕之後,彈出如下的對話方塊,輸入產品名稱後,點完成就行了。
點擊設定檔中的“啟動程式”,我們可以試著啟動我們的RCP程式。結果呢,會出錯。原因很簡單,因為我們沒有為我們的程式選中它依賴的外掛程式。
選中設定檔的“配置”選項卡,添加以下幾個依賴項,記住,一定要把我們自己,也就是com.blogjava.youxia.rcp_start加進依賴項,否則會出錯。最開始的時候,就是這麼一點小問題,讓我浪費了幾天時間。
再點擊添加必須的外掛程式,自動添加其它的依賴項。
再下一步,設定項目的構建路徑,如下圖:
下一步,匯出我們的程式:
點下一步,輸入我們程式匯出的目錄,如下圖:
點完成按鈕之後,我們的程式就匯出到我們的指定的目錄中了,開啟這個目錄,可以看到一個類似eclipse的程式表徵圖,雙擊運行,效果如下圖:
最後,需要說明兩點:第一,如果希望產生的程式有自己的表徵圖,可以在產品設定檔中的最後兩個設定檔中設定;第二,產生的程式應該是沒有功能表列的,因為我的Eclipse安裝了MyEclipse,所以匯出的程式就多了兩個菜單。
好了,快速起步就到這裡了,以後再仔細研究產生的程式碼和為我們的程式添加功能。
=========================================================================
在使用Eclipse RCP進行傳統型程式開發(一):快速起步中,我們通過Eclipse的外掛程式開發嚮導,逐步建立了一個RCP應用程式,但是,這個程式沒有任何功能,難以激起我們學習的興趣。在這一節,我們將一起探索怎樣在程式中添加菜單和工具條。先看一下成果:
圖一、圖二:帶有菜單和工具條的RCP程式
圖三:工具列上的按鈕的提示文本
圖四:點擊功能表項目或者工具列按鈕後,彈出一個簡單的對話方塊。
這裡需要說明一點,為什麼要在講菜單和工具列的時候一起講對話方塊,這是因為對話方塊是我們所能想到的最簡單最直接的使用者互動方式,在對話方塊上可以添加 各種各樣的控制項來實現複雜的功能,為了讓我們點擊功能表項目的時候能夠看到效果,這裡就用了一個簡單的對話方塊。當然,當我們以後接觸到視圖、編輯器和透視圖這 樣的概念之後,我們能使用的使用者互動方式就不僅僅只是對話方塊了。
開啟我們上一節使用嚮導建立的工程,可以發現工程下面自動產生了如下檔案:
Application.java
ApplicationWorkbenchAdvisor.java
ApplicationWorkbenchWindowAdvisor.java
ApplicationActionBarAdvisor.java
Perspective.java
plugin.xml
這裡的Application.java是我們整個程式的進入點,我們的程式啟動並執行時候,會先執行Application的run方法,run方法的代碼如下: 1 public Object run(Object args) throws Exception {
2 Display display = PlatformUI.createDisplay();
3 try {
4 int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
5 if (returnCode == PlatformUI.RETURN_RESTART) {
6 return IPlatformRunnable.EXIT_RESTART;
7 }
8 return IPlatformRunnable.EXIT_OK;
9 } finally {
10 display.dispose();
11 }
12 }
在第4行我們可以看出,該入口函數將建立使用者介面的工作交給了ApplicationWorkbenchAdvisor類。接著,我們開啟ApplicationWorkbenchAdvisor.java,代碼如下: 1 public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
2
3 private static final String PERSPECTIVE_ID = " cn.blogjava.youxia.rcp_start.perspective " ;
4
5 public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
6 return new ApplicationWorkbenchWindowAdvisor(configurer);
7 }
8
9 public String getInitialWindowPerspectiveId() {
10 return PERSPECTIVE_ID;
11 }
12 }
可以看出,這個類的工作就是為我們的程式指定預設的透視圖,然後把建立視窗的工作交給了 ApplicationWorkbenchWindowAdvisor類。接著,我們開啟 ApplicationWorkbenchWindowAdvisor.java檔案,看到代碼如下: 1 public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor