Eclipse開發:瞭解RCP應用的實現
通過PDE的嚮導,使用者能很容易地建立RCP的應用,但如果要在此基礎上繼續擴充套件,則要了解RCP的組成及各部分的功能。
Plugin.xml描述
RCP程式是基於外掛架構的,所以開發RCP程式首先是開發Eclipse外掛,把使用者開發的外掛整合到Eclipse的核心中,共同組成RCP應用,RCP程式也是通過Plugin.xml檔案描述外掛的。在上一節的mail示例中,Plugin.xml檔案描述了實現擴充套件點的幾個部分,介紹如下。
(1)檢視:mail應用定義了兩個檢視,一個為Message檢視,另一個為Mailboxes檢視,如以下程式碼所示。
allowMultiple="true"
icon="icons/sample2.gif"
class="com.free.rcp.mail.View"
id="com.free.rcp.mail.view">
allowMultiple="true"
icon="icons/sample3.gif"
class="com.free.rcp.mail.NavigationView"
id="com.free.rcp.mail.navigationView">
(2)預設透檢視:在mail應用中,透檢視只包含了應用中定義的檢視,其定義如以下程式碼所示。
class="com.free.rcp.mail.Perspective"
id="com.free.rcp.mail.perspective">
(3)應用:RCP應用中都要實現自己的應用,如以下程式碼所示。
point="org.eclipse.core.runtime.applications">
(4)產品:可以通過產品來發布使用者定義的應用,如以下程式碼所示。
point="org.eclipse.core.runtime.products">
name="RCP Product">
value="%aboutText">
value="icons/sample2.gif">
value="product_lg.gif">
mail示例是一個比較完整的RCP應用,使用者可以看到,mail實現了自己的檢視、視角和產品的擴充套件點,組織應用的佈局和相關的實現。下面將介紹RCP應用中所實現的功能。
RCP應用的入口Application
Eclipse的執行時元件通過“org.eclipse.core.runtime.applications”擴充套件點找到RCP應用的入口,執行應用。應用擴充套件點要實現IPlatformRunnable介面,Eclipse會執行應用實現類的run方法,程式碼如例程1所示。
例程1 Application.java
package com.free.rcp.mail;
import org.eclipse.core.runtime.IPlatformRunnable;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
public class Application implements IPlatformRunnable {
public Object run(Object args) throws Exception {
//得到display
Display display = PlatformUI.createDisplay();
try {
//建立工作臺
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IPlatformRunnable.EXIT_RESTART;
}
return IPlatformRunnable.EXIT_OK;
} finally {
display.dispose();
}
}
}
Application類實現了IPlatformRunnable介面,Eclipse核心會執行run方法執行應用。在run方法中,通過PlatformUI類的createAndRunWorkbench方法建立了應用的工作臺。
工作臺ApplicationWorkbenchAdvisor
Application通過PlatformUI的createAndRunWorkbench建立應用的工作臺,其中第二個引數為WorkbenchAdvisor,表示工作臺的配置等。例如可以獲得應用的視角,程式碼如例程2所示。
例程2 ApplicationWorkbenchAdvisor.java
package com.free.rcp.mail;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
//視角ID
private static final String PERSPECTIVE_ID = "com.free.rcp.mail.perspective";
//建立工作臺視窗
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
return new ApplicationWorkbenchWindowAdvisor(configurer);
}
//獲得當前工作臺的視角
public String getInitialWindowPerspectiveId() {
return PERSPECTIVE_ID;
}
}
如以上程式碼所示,通過ApplicationWorkbenchAdvisor類的getInitialWindowPerspectiveId可以獲得當前工作臺的視角,通過createWorkbenchWindowAdvisor方法能建立當前工作臺的視窗。
另外,使用者可以通過實現WorkbenchAdvisor類,以及重寫WorkbenchAdvisor的方法,控制工作臺的生命週期中每個切入點的執行方法,主要有如下的方法。
(1)工作臺生命週期相關方法
WorkbenchAdvisor類有幾個方法和工作臺的生命週期有關,使用者能通過重寫這幾個方法,在工作臺生命週期的某個特定點執行自己的程式碼,如表1所示。
表1 工作臺生命週期相關方法
方 法 |
描 述 |
參 數 |
initialize |
工作臺初始化 |
IWorkbenchConfigurer |
preStartup |
在initialize之後,工作臺視窗被開啟之前執行 |
無 |
postStartup |
在所有的工作臺視窗被開啟之後執行 |
無 |
preShutdown |
工作臺被停止之前(視窗被關閉之前)執行 |
無 |
postShutdown |
工作臺被停止之後(視窗被關閉之後)執行 |
無 |
訊息迴圈負責處理使用者的輸入,然後把輸入分配到相關的監聽器進行處理,WorkbenchAdvisor中提供了一些鉤子方法,處理訊息迴圈的某些問題,如表2所示。
表2 訊息迴圈相關方法
方 法 |
描 述 |
參 數 |
eventLoopException |
當訊息迴圈中有未處理的異常時執行 |
Throwable |
eventLoopIdle |
當訊息佇列中無處理的訊息時執行 |
Display |
(3)配置相關方法
WorkbenchAdvisor中能通過重寫一些方法,實現工作臺的配置,其中最常用的是getInitialWindowPerspectiveId方法,返回視角的ID。
工作臺視窗ApplicationWorkbenchWindowAdvisor
ApplicationWorkbenchAdvisor類通過createWorkbenchWindowAdvisor方法能建立工作臺視窗。通過實現WorkbenchWindowAdvisor類,使用者能定製工作臺視窗的大小、狀態列、工具欄等資訊,程式碼如例程3所示。
例程3 ApplicationWorkbenchWindowAdvisor.java
package com.free.rcp.mail;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
//建立Action Bar
public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
//設定工作臺視窗的大小
configurer.setInitialSize(new Point(600, 400));
//是否顯示CoolBar
configurer.setShowCoolBar(true);
//是否顯示狀態列
configurer.setShowStatusLine(false);
}
}
使用者也可以通過重寫WorkbenchWindowAdvisor中的方法,控制工作臺視窗生命週期的執行過程。例如,上例的preWindowOpen方法,在視窗開啟直接設定視窗的大小、是否顯示狀態列等屬性,這些方法大多數以“pre”、“post”和“create”開始。
工作臺“Action Bar”ApplicationActionBarAdvisor
在Eclipse中,“Action Bar”是選單、工具欄和狀態列的統稱,通過ActionBarAdvisor可以定製RCP應用的“Action Bar”,程式碼如例程4所示。
例程4 ApplicationActionBarAdvisor.java
package com.free.rcp.mail;
/**
* 為了節省篇幅,所有的import類已經被註釋
* 讀者可以通過ctrl+shift+o快捷鍵,自動引入所依賴的類
* 如果有問題可發郵件到ganshm@gmail.com
* */
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
private IWorkbenchAction exitAction;
private IWorkbenchAction aboutAction;
private IWorkbenchAction newWindowAction;
private OpenViewAction openViewAction;
private Action messagePopupAction;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
protected void makeActions(final IWorkbenchWindow window) {
//建立相應的Action
exitAction = ActionFactory.QUIT.create(window);
register(exitAction);
aboutAction = ActionFactory.ABOUT.create(window);
register(aboutAction);
newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
register(newWindowAction);
penViewAction = new OpenViewAction(window, "Open Another Message View", View.ID);
register(openViewAction);
messagePopupAction = new MessagePopupAction("Open Message", window);
register(messagePopupAction);
}
protected void fillMenuBar(IMenuManager menuBar) {
//新增檔案和幫助選單
MenuManager fileMenu = new MenuManager("&File",
IWorkbenchActionConstants.M_FILE);
MenuManager helpMenu = new MenuManager("&Help",
IWorkbenchActionConstants.M_HELP);
menuBar.add(fileMenu);
// Add a group marker indicating where action set menus will appear.
menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
menuBar.add(helpMenu);
//新增檔案選單的Action
fileMenu.add(newWindowAction);
fileMenu.add(new Separator());
fileMenu.add(messagePopupAction);
fileMenu.add(openViewAction);
fileMenu.add(new Separator());
fileMenu.add(exitAction);
//新增幫助選單的Action
helpMenu.add(aboutAction);
}
protected void fillCoolBar(ICoolBarManager coolBar) {
//新增CoolBar
IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
//新增ToolBar到CoolBar中
coolBar.add(new ToolBarContributionItem(toolbar, "main"));
//新增Action到ToolBar中
toolbar.add(openViewAction);
toolbar.add(messagePopupAction);
}
}
以上程式通過makeActions方法建立了所有的Action,通過fillMenuBar方法新增了檔案選單和幫助選單,通過fillCoolBar方法新增了CoolBar工具欄項。選單和工具欄共用相關的Action。
RCP應用的透檢視(perspective)
WorkbenchAdvisor中getInitialWindowPerspectiveId方法是一個抽象方法,也就是說要通過WorkbenchAdvisor建立工作臺,使用者必須實現自己的透檢視(也可以是Eclipse中現有的視角)。工作臺會通過getInitialWindowPerspectiveId方法得到透檢視擴充套件點的ID,並用此透檢視對檢視佈局。本例中透檢視的實現程式碼如例程5所示。
例程5 Perspective.java
package com.free.rcp.mail;
import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
public class Perspective implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
//設定編輯區域不可見
layout.setEditorAreaVisible(false);
//新增檢視
layout.addStandaloneView(NavigationView.ID,
false, IPageLayout.LEFT, 0.25f, editorArea);
//新增Folder,並在Folder中新增檢視
IFolderLayout folder = layout.createFolder("messages",
IPageLayout.TOP, 0.5f, editorArea);
folder.addPlaceholder(View.ID + ":*");
folder.addView(View.ID);
//設定NavigationView檢視不可關閉
layout.getViewLayout(NavigationView.ID).setCloseable(false);
}
}
在Perspective視角中設定了編輯區域不可見,並新增了兩個檢視,其中messages檢視放在一個Folder中,在此Folder中還能新增其他的檢視,最後通過setCloseable方法設定NavigationView檢視是不可關閉的。
在此,檢視和其他擴充套件點的實現就不介紹了,讀者可以參考原始碼瞭解mail應用的實現。
RCP是Eclipse 3.0以後發展起來的,目的在於以Eclipse平臺為框架,開發出基於Java的獨立執行的應用。可以斷言,隨著Eclipse開發的不斷深入和廣為使用者接受,RCP程式將會在Java的桌面應用中佔據一席之地。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13081368/viewspace-420451/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何快速開發Java RCP企業級應用?Java
- 帶你瞭解 WebAssembly 的發展、應用與開發Web
- swt、eclipse RCP與“Java All in One”EclipseJava
- 深入瞭解Rabbit加密技術:原理、實現與應用加密
- 提高開發效率的 Eclipse 實用操作(2)Eclipse
- 能夠提高開發效率的 Eclipse 實用操作Eclipse
- 能夠提高開發效率的Eclipse實用操作Eclipse
- 用Eclipse開發FlexEclipseFlex
- iOS 11開發教程(十一)瞭解iOS11應用檢視iOS
- 天天用的開發環境,你真的瞭解嗎?開發環境
- 天天用的開發環境 你真的瞭解嗎?開發環境
- 一文帶你瞭解Spring核心介面Ordered的實現及應用Spring
- 三分鐘瞭解互動滑軌屏的實現原理與應用
- 中級Android開發應該瞭解的Binder原理Android
- 後端開發都應該瞭解的登入漏洞後端
- 快應用簡單瞭解
- 從頭開始瞭解PyTorch的簡單實現PyTorch
- 後端開發都應該瞭解的資訊洩露風險後端
- 使用Xamarin實現跨平臺移動應用開發
- HarmonyOS NEXT應用開發案例——列表編輯實現
- Egret應用開發實踐(03) MVC 模組化具體實現MVC
- 應用層,瞭解一下
- Eclipse/tomcat 如何實現應用熱部署和熱啟動EclipseTomcat熱部署
- 每個安卓開發初學者應該瞭解的 12 個技巧安卓
- Java Web應用開發環境配置Eclipse+Tomcat+LombozJavaWeb開發環境EclipseTomcat
- Java Web應用開發環境配置Eclipse+Tomcat+MyeclispeJavaWeb開發環境EclipseTomcatLisp
- 使用 ViroReact 開發增強實現應用的一個具體例子React
- 藍芽技術與協議的開發應用與實現(轉)藍芽協議
- iOS開發中的Scroll View應用詳解iOSView
- 驅動開發:透過應用堆實現多次通訊
- MVP實現Android應用層開發原理及過程MVPAndroid
- HarmonyOS NEXT應用開發之MpChart圖表實現案例
- android開發透過wireshark實現flutter應用抓包AndroidFlutter
- 快速瞭解Python併發程式設計的工程實現(下)Python程式設計
- 快速瞭解Python併發程式設計的工程實現(上)Python程式設計
- Xposed瞭解以及在Android中的應用Android
- 全面瞭解大資料“三駕馬車”的開源實現大資料
- 用 OSGi 應用程式開發和工作的最佳實踐