java-RCP
Posted l841017122
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java-RCP相关的知识,希望对你有一定的参考价值。
Rich Client Platform富客户平台
eclipse3.7下:
ApplicationActionBarAdvisor:简单的说这个类是用来配置程序的菜单栏和工具栏的
ApplicationWorkbenchAdvisor:这个类是RCP程序的Workbench,RCP是Eclipse的简化,但是所有的组件都是和Eclipse一样的。一个RCP程序也只能有一个Workbench。
ApplicationWorkbenchWindowAdvisor:这个类是RCP的WorkbenchWindow,隶属于当前的Workbench。可以有多个WorkbenchWindow。
Perspective:是我们新建的RCP的默认透视图。可以在这个类中指定View和Editor的排布。
plugin.xml:这个文件是我们插件的配置文件,包括我们的插件用了哪些其他的插件,具体是怎么配置这些插件的等等。
build.properties:这个文件是用来配置我们插件的编译信息的,用来指定如何编译我们的插件。
MANIFEST.MF:这个文件用来指定我们插件的元数据,比如插件的版本信息。一般来说,这个文件不用手动的去更改。
具体实现:
package demo; import org.eclipse.jface.action.Action; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.internal.IWorkbenchGraphicConstants; import org.eclipse.ui.internal.WorkbenchImages; public class HelloAction extends Action { private IWorkbenchWindow window; public HelloAction(IWorkbenchWindow window) { //由于Action是一个UI元素,所以往往创建一个带IWorkbenchWindow参数的构造函数,以便在Action内部调用 this.window = window; this.setText("Hello"); ImageDescriptor imgDes = WorkbenchImages .getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_EDITOR_TRIMPART);//用Eclipse Workbench自带的图标。 this.setImageDescriptor(imgDes); } public void run() { MessageBox mb = new MessageBox(window.getShell(), SWT.OK); mb.setMessage("Hello world!"); mb.setText("Demo"); mb.open(); } }
package demo; import org.eclipse.jface.action.ICoolBarManager; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.ToolBarContributionItem; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.swt.SWT; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.application.ActionBarAdvisor; import org.eclipse.ui.application.IActionBarConfigurer; public class ApplicationActionBarAdvisor extends ActionBarAdvisor { HelloAction helloAction; public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { super(configurer); } protected void makeActions(IWorkbenchWindow window) { //用来初始化action的,所有要用到的action可以都在这里初始化 super.makeActions(window); helloAction = new HelloAction(window); } protected void fillMenuBar(IMenuManager menuBar) { super.fillMenuBar(menuBar); MenuManager demoMenu = new MenuManager("&Demo", ""); //菜单栏增加Demo子菜单,Demo有两个名为Hello的下拉按钮 demoMenu.add(helloAction); demoMenu.add(helloAction); menuBar.add(demoMenu); } protected void fillCoolBar(ICoolBarManager coolBar) //工具栏增加Hello按钮 { IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); coolBar.add(new ToolBarContributionItem(toolbar, "main")); toolbar.add(helloAction); } }
可以用同样的方法创建一个EditorPart,名字就叫HelloEditor。在editor上面放一个text组件吧,这样看起来像个editor,然后把HelloEditor的layout改成FillLayout。当然也要为HelloEditor添加一个ID属性。这里需要改一下Editor的init方法,否则editor无法正常运行。
this.setSite(site);//setSite是让editor能够使用workbench所提供的一些功能
this.setInput(input);
public void createInitialLayout(IPageLayout layout) { layout.addStandaloneView(helloview.ID, true, IPageLayout.LEFT, .50f, layout.getEditorArea()); //当前的Perspective添加一个独立的View layout.getViewLayout(helloview.ID).setCloseable(false);//去除了关闭View的功 }
设置并打开Editor
// TODO Auto-generated method stub
return "Hello";
}
// TODO Auto-generated method stub
return "Demo";
}
@Override
public void widgetSelected(SelectionEvent e) {
try {
getViewSite().getWorkbenchWindow().getActivePage()
.openEditor(new HelloEditorInput(), HelloEditor.ID);
} catch (Exception e2) {
System.out.println(e2);
}
}
});
导出rcp程序:
以上是关于java-RCP的主要内容,如果未能解决你的问题,请参考以下文章