Rich Client Tutorial Part 3 翻译
当你自己写应用程序时,最快的办法是找一个模板或其它和你要创建的应用相类似的程序,然后拷贝。这也是我要使用的办法,使用一个叫“RCP Mail”的模板。在该教程的结尾有你需要理解掌握的信息,包含了该例子是如何工作的,然后你就可以基于此创建你自己的应用了。 RCP Mail template这个RCP Mail 模板不是一个真正功能性的mail应用程序,但却是一个独立的RCP例子,教我们如何: 通过actions添加顶层菜单和工具栏 通过actions添加键盘绑定(keybindings )
创建不可关闭的视图和多个相同实例的视图 用placeholders为新的视图创建透视图 使用默认的About对话框 创建一个产品定义(product definition)
想第一部分一样,选择 File > New > Project, 展开Plug-in Development 然后再选择 Plug-in Project 打开一个插件项目创建向导.输入项目的名字,如 org.eclipse.ui.tutorials.rcp.part3,
在选择"Would you like to create a rich client application?"时选择 Yes. 然后点击下一步,选择RCP Mail Template后点击Finish
Figure 1. 通过RCP Mail Template生成的实例可以作为你自己RCP应用的骨架使用。
在Plug-in Manifest属性页中点击"Launch an Eclipse application"测试该应用,如果成功就会看到下面的图:
RCP Mail 有两个视图,左边展示的是mail消息,右边是特定的mail消息。这些views都是通过org.eclipse.ui.views扩展点扩展而来,是在
plugin.xml 中定义。 Listing 1 展示了 Message view的定义:
Listing 1. Message view defined in plugin.xml
layout.addStandaloneView(NavigationView.ID, IFolderLayout folder = layout.createFolder( layout.getViewLayout(NavigationView.ID).setCloseable( 因为该例子没有使用到编辑器,所以在你关闭编辑器后在工作台窗口的中间不会看到一大片空白。如果你使用了编辑器,则删除该行。
point="org.eclipse.ui.views">
name="Message"
allowMultiple="true"
icon="icons/sample2.gif"
alt="Rich Client Tutorial Part 三 翻译" height="13" src="/img/2012/10/18/1343004185.gif" /> public static final String ID = "org.eclipse.ui.tutorials.rcp.part3.view";public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
...etc...
}
public void setFocus() {
}
}Notes:
定义了一个ID常量,ID_模式在Eclipse源代码中随处可见。这里使用的ID和plug-in manifest中的id是一样的,当我们需要获得该视图时需要用到该ID。![]()
createPartControl
方法是该类中最重要的方法. 在这里需要创建视图中需要的 JFace 或 SWT 控件. 关于View编程不在该教程讨论之列,但在引用部分有一些资源可供你学习。你也许会奇怪,Eclipse是如何知道把Mailbox视图放在左边,而把Messages放在右边?这就需要用到透视图Perspective了。
透视图PerspectivesViews 和editors只能显示在 perspective中., 可以在plugin.xml中通过扩展
org.eclipse.ui.perspectives
来定义透视图. The initial layout for it (i.e., what parts it starts up with) is set up in code. Listing 3 展示了RCP Mail application中的初始化布局代码 。Listing 3. Perspective.java
String editorArea = layout.getEditorArea();


allowMultiple="true"吗
? 这意味着你不能确定Messages视图的位置,因为它们不只一个。所以首先你需要为它们创建一个folder,然后调用addPlaceholder()
方法把folder与和Message 视图标识id相匹配的pattern 联系起来. 最后调用 addView()
添加视图. 在一个真实的应用中你也许要记住哪个message先被打开,以便在程序重启后重新打开。 
为了在下次启动应用时恢复用户的布局和窗口的大小,需要在WorkbenchAdvisor
中添加configurer.setSaveAndRestore(true);
到initialize()方法中。
创建一些placeholders来容纳那些通过插件添加进来的附加菜单项是一个好办法. 在开始编码时,你应该使用那些标准的placeholder命名。通过使用预定义的groups,你可以像用插件plug-ins把菜单和工具栏项添加到 Eclipse IDE一样把它们添加进你的 RCP应用中.除了在Javadoc的makeActions()
是由平台来调用的,用来创建所有与菜单和工具栏想关联的 actions 。一个Action是一个拥有用户接口组件(菜单和工具栏如何显示)和功能组件(动作)的简单类。可以通过查看Javadoc 的 ActionFactory
和ContributionItemFactory来了解被支持的
Workbench actions列表。
fillMenuBar()
是用actions来填充工作台的菜单栏. RCP Mail 包含了两个顶层菜单, "File" 和 "Help". 首先你要为每个顶层菜单创建一个 MenuManager,然后将菜单添加到菜单栏,将actions添加到菜单。
fillCoolBar()
定义了Workbench的coolbar . 一个 coolbar 是 toolbars的集合, 而一个 toolbar 又是actions的集合. 在这个实例中只有一个 toolbar. 你先创建一个新的toolbar manager , 然后添加 toolbar 到 coolbar, 最好添加actions 到toolbar. IWorkbenchActionConstants
以外没有其它任何的资料文档,即使在Javadoc中也没有任何指南。最好的参考就是Eclipse IDE 源代码本身。
确保在你的插件构建配置中包含了images和icons文件(在Plug-in Manifest 中的Build 标签,或者 build.properties
文件). 否则它们不会包含在插件的jar包中或在导出操作时不会拷贝它们。 模板中我们注意到了那些,但很容易在你自己的应用中忘记。
?
后记:花了一天的时间把这篇文章翻译完了,感觉上看得懂,但翻译起来有点拿不准,可能是我的英文太烂的原因吧。最近的项目需要用rcp技术来做,这是一篇入门的文章,以后我还会持续写一些自己的积累和体会。