java-RCP

来源:互联网 发布:mac剪切图片 编辑:程序博客网 时间:2024/05/29 03:12

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:这个文件用来指定我们插件的元数据,比如插件的版本信息。一般来说,这个文件不用手动的去更改。

具体实现:

新建Action类,必须继承org.eclipse.jface.action.Action。定义当用户执行某项操作时触发某个Action。比如用户点击工具栏的一个按钮,或者选中了某个菜单项.
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();}}
修改ApplicationActionBarAdvisor.java为:
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);}}

在ApplicationWorkbenchWindowAdvisor类的preWindowOpen方法中:
//configurer.setShowCoolBar(false);  //工具栏可见
结果:




下载安装WB_v1.7.0_UpdateSite_for_Eclipse4.2.zip

为这个插件能够支持SWT,JFace,RCP,Swing的可视化编辑,极大的缩短了界面开发的时间。





可以用同样的方法创建一个EditorPart,名字就叫HelloEditor。在editor上面放一个text组件吧,这样看起来像个editor,然后把HelloEditor的layout改成FillLayout。当然也要为HelloEditor添加一个ID属性。这里需要改一下Editor的init方法,否则editor无法正常运行。

this.setSite(site);//setSite是让editor能够使用workbench所提供的一些功能
this.setInput(input);

EditorSite可以看成是一个代理,EditorPart通过EditorSite来访问workbench。EditorSite是editor part和workbench之间的一层接口

打开plugin.xml,选择Extensions标签页,在All Extensions部分点击“Add”按钮,选择org.eclipse.ui.views, org.eclipse.ui.editors, 两个extension,结果如下:











在Extension Element Details部分设置View的属性。ID可以随意设置,但是不能重复,我这里设置为Demo.helloView(虽说是随意设置,但是程序是通过这个ID来获得View的,所以最好与HelloView中的ID属性一致,我在HelloView中加入这个ID属性也是为了方便程序获得HelloView),Name也可以随意设置,我这里设置为Hello View,这个属性会显示在View的顶端,就像Outline View顶部显示的名称是“Outline”。class选择刚才创建的demo.HelloView。icon是显示在View顶部的图标,没有可以不设置。



类似的创建Hello Editor,设置Hello Editor的详细属性,设置id, name, class三个属性以外,还要设置icon属性(Editor的Icon属性是必须的!),随便给个图片文件就行,其他的属性可以不填。这里属性比较多,有兴趣可以去看Eclipse的插件开发帮助,里面对每个属性都有解释。





一个viewpart(helloview)有button组件,一个editorpart(HelloEditor)有text组件



plugin.xml中新建view和editor ID与上述类的ID保持一致。

打开Perspective.java,修改createInitialLayout()方法
public void createInitialLayout(IPageLayout layout) {layout.addStandaloneView(helloview.ID, true,IPageLayout.LEFT, .50f, layout.getEditorArea());  //当前的Perspective添加一个独立的Viewlayout.getViewLayout(helloview.ID).setCloseable(false);//去除了关闭View的功}


设置并打开Editor







要打开Editor的话必须给Editor内容
这里的内容就是Eclipse里面的EditorInput。没有现成合适的EditorInput用(一般情况下可以用FileEditorInput,把某个文件作为Input让Editor打开,在Eclipse里面双击打开某个文件就是这个过程)

创建一个HelloEditorInput继承IEditorInput接口。用Eclipse向导创建类的时候,先选择Interface,然后记得选中“Inherited abstract methods”,这样会自动继承所有abstract的方法,不用再去手工创建了
返回当前input的名字,比如文件名(这块不懂)
public String getName() {
// TODO Auto-generated method stub
return "Hello";
}

光标移到editor顶部时会显示“Demo”:
public String getToolTipText() {
// TODO Auto-generated method stub
return "Demo";
}

为按钮增加事件:



btnNewButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
try {
getViewSite().getWorkbenchWindow().getActivePage()
.openEditor(new HelloEditorInput(), HelloEditor.ID);
} catch (Exception e2) {
System.out.println(e2);
}
}
});

窗口最大化:
ApplicationWorkbenchWindowAdvisor类中的postWindowOpen函数:
this.getWindowConfigurer().getWindow().getShell().setMaximized(true);


导出rcp程序:



















0 0