RCP菜單欄,工具欄實現方法及RCP記事本例子 java
file->new->other->plug-ins project,建立一個名爲org.test.menuAndToolbar的工程: app
選擇建立RCP hello world 模板的項目,點擊finish完成建立項目: eclipse
點擊plugin.xml文件,打開extensions頁: ide
能夠看到,Extentions原本已經有兩個擴展包含在裏面了,如今咱們要添加一個actionSets擴展,點擊「add」按鈕,添加org.eclipse.ui.actionSets: 函數
添加進org.eclipse.ui.actionSets後會默認有一個actionSet,要把它的visible設置爲true,必定要設置爲true,不然看不到菜單欄: 工具
在actionSet上右鍵添加一個menu, 佈局
給menu新建一個separator,命名爲separator1: 測試
在label(actionSet)上右鍵新建一個action: ui
這個action的Label設置爲「打開」,menubarPath設置爲:org.test.menuAndToolbar.menu1/separator1。Class設置爲:actions.OpenFileAction。 spa
設置好之後點擊class超連接,會提示新建一個類,選擇默認設置,直接點擊finish:
這個類會默認實現IWorkbenchWindowActionDelegate接口,具體代碼以下:
package actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
public class OpenFileAction implements IWorkbenchWindowActionDelegate {
@Override
public void run(IAction action) {
// TODO Auto-generated method stub
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
@Override
public void init(IWorkbenchWindow window) {
// TODO Auto-generated method stub
}
}
點擊「打開」菜單時,將會觸發run(IAction action) 函數的事件,咱們能夠修改它的代碼查看點擊效果:
public void run(IAction action) {
// TODO Auto-generated method stub
MessageDialog.openInformation(null, "測試 ", "點擊了打開菜單");
}
爲了更好的表示菜單,能夠再給label(actionSet)右鍵添加一個action,命名爲「退出」,添加的步驟跟上面「打開」同樣。修改退出action中的run方法:
@Override
public void run(IAction action) {
// TODO Auto-generated method stub
//RCP程序退出代碼
PlatformUI.getWorkbench().getActiveWorkbenchWindow().close();
}
點擊overview中的launch an eclipse application查看效果:
咱們添加菜單項的順序是先添加「打開」再添加「退出」,可是這裏卻顯示退出在打開上方,實際上菜單在定義時應該將其設置爲與出現的順序相反。(能夠在extensions中使用up ,down按鈕調整他們的順序)。
一個很簡單的方法,就是把剛纔所設置的菜單欄的菜單項顯示成工具欄上。只須要在extensions中將各個action的toolbarPath屬性設置成additions(它是Eclipse內置的標準工具欄插入點),不過建立的RCP工程默認是不顯示工具欄的,因此咱們要先在ApplicationWorkbenchWindowAdvisor.java文件裏先吧setShowCoolBar設置成true
configurer.setShowCoolBar(true);
設置好之後能夠運行查看效果:
上面「退出」、「打開」在同一個actionSet中,因此他們在工具欄裏顯示在同一組中,而「工具」action在另外一個新建的actionSet中。工具欄的按鈕能夠不顯示在菜單欄中,只要設置menubarPath設置爲空的就能夠了。
在extensions中add進org.eclipse.ui.commands擴展,以下圖:
New一個command,name設置爲「測試工具欄」,其它默認:
把org.eclipse.ui.handlers中默認有的一個handler的commandId設置爲:org.test.menuAndToolbar.command1,即爲剛纔添加的command的ID:
設置它的class爲:commands.Command1。點擊class超連接,建立這個類,並讓它繼承AbstractHandler。獲得Command1代碼以下:
package commands;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.handlers.HandlerUtil;
public class Command1 extends AbstractHandler implements IHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
// TODO Auto-generated method stub
return null;
}
}
點擊這個工具欄的時候將觸發excute函數,因此能夠在裏面添加一個提示信息查看效果:
public Object execute(ExecutionEvent event) throws ExecutionException {
// TODO Auto-generated method stub
MessageDialog.openInformation(HandlerUtil.getActiveShell(event), "測試", "測試command");
return null;
}
在org.eclipse.ui.menus上右鍵new一個menuContribution,它的locationURI設置爲:menu:org.eclipse.ui.main.menu (它是eclipse標準菜單擴展位置),而後在它上面右鍵新建menu:
這個menu的name和ID能夠自定義設置,這裏咱們設置成:
而後在測試菜單欄上右鍵新建command,將它的ID指向剛纔在commands擴展下建的command1便可(將commandId設置爲command1的ID):
到這裏咱們已經完成了菜單欄的建立。可是咱們還能夠把command1添加到工具欄上。它的步驟爲:
在org.eclipse.ui.menus擴展上右鍵new一個menuContribution,將它的locationURI設置爲:toolbar:org.eclipse.ui.main.toolbar(它是eclipse的標準工具欄擴展位置)。
在它上面右鍵new一個toolbar,id能夠自定義。而後在這個toolbar上new一個command,將它的commandId指向剛纔建立的comman1的ID便可:
到這裏咱們能夠運行調試,能夠看到用以上兩種方法建立的菜單欄和工具欄都顯示在RCP程序上:
爲了綜合的理解和使用菜單欄和工具欄,特地寫了一個RCP記事本工具,它可以打開txt文本,可以搜索字符串,可以進行編輯,可以保存編輯後的文件,它也使用了text,list,radio button等經常使用控件。
使用了左右兩邊佈局的最多見的佈局方式,viewpart佈局的設置文件在perspective.java文件中,個人程序代碼以下:
public void createInitialLayout(IPageLayout layout) {
layout.setEditorAreaVisible(false);
String editArea=layout.getEditorArea();
layout.addView(FirstView.ID, IPageLayout.LEFT, 0.25f, editArea);
layout.addView(TextEditor.ID, IPageLayout.RIGHT, 0.75f, editArea);
}
不一樣viewpart之間能夠互相調用一些方法,好比我在「工做區」這個viewpart裏面想要調用「編輯區」的東西,可使用下面的方法:
IViewPart findView = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("views.TextEditor");
TextEditor textEditor=(TextEditor)findView;
int index = textEditor.getEditorText().indexOf(text.getText());
其中,getEditorText()爲「編輯區」viewPart中定義的方法。
打開文件:
搜索字符串,點擊list中記錄的下標可使查找的字符串選擇顯示:
保存文件: