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中记录的下标可使查找的字符串选择显示:
保存文件: