RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

 

RCP菜单栏,工具栏实现方法及RCP记事本例子


 

一、创建工程

file->new->other->plug-ins project,创建一个名为org.test.menuAndToolbar的工程:RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

选择创建RCP hello world 模板的项目,点击finish完成创建项目:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

二、添加菜单栏

 点击plugin.xml文件,打开extensions页:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

可以看到,Extentions本来已经有两个扩展包含在里面了,现在我们要添加一个actionSets扩展,点击“add”按钮,添加org.eclipse.ui.actionSets:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

添加进org.eclipse.ui.actionSets后会默认有一个actionSet,要把它的visible设置为true,一定要设置为true,否则看不到菜单栏:RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

在actionSet上右键添加一个menu,RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

menu新建一个separator,命名为separator1:

 

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

在label(actionSet)上右键新建一个action:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

这个action的Label设置为“打开”,menubarPath设置为:org.test.menuAndToolbar.menu1/separator1。Class设置为:actions.OpenFileActionRCP菜单栏,工具栏实现的两种方法及RCP记事本例子

设置好以后点击class超链接,会提示新建一个类,选择默认设置,直接点击finish:RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

这个类会默认实现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查看效果:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

我们添加菜单项的顺序是先添加“打开”再添加“退出”,但是这里却显示退出在打开上方,实际上菜单在定义时应该将其设置为与出现的顺序相反。(可以在extensions中使用up ,down按钮调整他们的顺序)。

三、添加工具栏

一个很简单的方法,就是把刚才所设置的菜单栏的菜单项显示成工具栏上。只需要在extensions中将各个action的toolbarPath属性设置成additions(是Eclipse内置的标准工具栏插入点),不过创建的RCP工程默认是不显示工具栏的,所以我们要先在ApplicationWorkbenchWindowAdvisor.java文件里先吧setShowCoolBar设置成true

       configurer.setShowCoolBar(true);RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

设置好以后可以运行查看效果:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

上面“退出”、“打开”在同一个actionSet中,所以他们在工具栏里显示在同一组中,而“工具”action在另一个新建的actionSet中。工具栏的按钮可以不显示在菜单栏中,只要设置menubarPath设置为空的就可以了。

四、另外一种添加菜单栏和工具栏的方法

4.1 添加commands扩展 

在extensions中add进org.eclipse.ui.commands扩展,如下图

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

New一个command,name设置为“测试工具栏”,其它默认:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

4.2 添加org.eclipse.ui.handlers扩展

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

把org.eclipse.ui.handlers中默认有的一个handler的commandId设置为:org.test.menuAndToolbar.command1,即为刚才添加的command的ID:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

设置它的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;

}

4.3 添加org.eclipse.ui.menus扩展

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

org.eclipse.ui.menus上右键new一个menuContribution,它的locationURI设置为:menu:org.eclipse.ui.main.menu (它是eclipse标准菜单扩展位置),然后在它上面右键新建menu:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

这个menu的name和ID可以自定义设置,这里我们设置成:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

然后在测试菜单栏上右键新建command,将它的ID指向刚才在commands扩展下建的command1即可(将commandId设置为command1的ID):

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

到这里我们已经完成了菜单栏的创建。但是我们还可以把command1添加到工具栏上。它的步骤为:

org.eclipse.ui.menus扩展上右键new一个menuContribution,将它的locationURI设置为:toolbar:org.eclipse.ui.main.toolbar(它是eclipse的标准工具栏扩展位置)。

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

在它上面右键new一个toolbar,id可以自定义。然后在这个toolbar上new一个command,将它的commandId指向刚才创建的comman1的ID即可:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

到这里我们可以运行调试,可以看到用以上两种方法创建的菜单栏和工具栏都显示在RCP程序上:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

五、RCP记事本demo

为了综合的理解和使用菜单栏和工具栏,特意写了一个RCP记事本工具,它能够打开txt文本,能够搜索字符串,能够进行编辑,能够保存编辑后的文件,它也使用了text,list,radio button等常用控件。

5.1 程序界面布局

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

使用了左右两边布局的最常见的布局方式,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);

}

5.2 不同viewpart之间的调用

不同viewpart之间可以互相调用一些方法,比如我在“工作区”这个viewpart里面想要调用“编辑区”的东西,可以使用下面的方法:

IViewPart findView = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("views.TextEditor");

TextEditor textEditor=(TextEditor)findView;

int index = textEditor.getEditorText().indexOf(text.getText());

其中,getEditorText()为“编辑区”viewPart中定义的方法。

5.3 程序的功能及运行效果

打开文件:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

搜索字符串,点击list中记录的下标可以使查找的字符串选择显示:RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

保存文件:

RCP菜单栏,工具栏实现的两种方法及RCP记事本例子

你可能感兴趣的:(RCP,toolbar,menu)