`
Brooke
  • 浏览: 1182224 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

RCP 在同一个透视图中同时打开多个同一个view

阅读更多
扩展 org.eclipse.ui.views 来创建 view




向导创建的ContactsView继承ViewPart抽象类,代码如下:

public ContactsView() {
}

@Override
public void createPartControl(Composite parent) {
    //接口方法,用于创建View内容。
}

@Override
public void setFocus() {
    //接口方法,View获得焦点时,由workbench调用。
}

将view添加到perspective

RCP程序都至少包含一个Perspective,IWorkbenchWindow包含一个Page,Page使用当前激活的Perspective来布局Views和Editors:
修改org.eclipsercp.hyperbola/Perspective.java

public void createInitialLayout(IPageLayout layout) {
    layout.setEditorAreaVisible(false);
    //将ContactsView放在默认Editor区域的左侧,所占区域比例为100%
    //比例的范围是0.0f(只显示title bar)到1.0f(占用整个窗口)
    layout.addView(ContactsView.ID, IPageLayout.LEFT,
        1.0f, layout.getEditorArea());
}
其中ContactsView.ID是在ContactsView自定义的静态常量,定义了plugin.xml中ContactsView的id:
public static final String ID = "org.eclipsercp.hyperbola.views.contacts";
IPageLayout .addView方法添加的View显示一个标题栏,可以进行移动、关闭、最大化、最小化等操作。运行效果如下:


如果不想显示标题栏,可以使用IPageLayout .addStandaloneView。

layout.addStandaloneView(ContactsView.ID, false, IPageLayout.LEFT, 1.0f, layout.getEditorArea());

运行效果如下:


关于 perspective 的更多描述可参考:
http://hi.baidu.com/monkeyhoop/blog/item/e20273e6d2b4c828b8382038.html

打开同一个 view 的多个实例

设置 view 的 enableMultiple 属性为 true

<extension
      point="org.eclipse.ui.views">
   <view
         allowMultiple="true"
         class="org.eclipsercp.hyperbola.ContactsView"
         icon="icons/groups.gif"
         id="org.eclipsercp.hyperbola.views.contacts"
         name="Contacts"/>     
</extension>
修改 addView() 的 ID 属性为如下格式 primary-id:secondary-id ,并保证 secondary-id 在 perspective 中是唯一的:

org.eclipsercp.hyperbola/Perspective
public void createInitialLayout(IPageLayout layout) {
layout.addStandaloneView(ContactsView.ID + ":1", false,
      IPageLayout.LEFT, 0.33f, layout.getEditorArea());
layout.addView(ContactsView.ID + ":2",
      IPageLayout.BOTTOM, 0.70f, layout.getEditorArea());
layout.addView(ContactsView.ID + ":3",
      IPageLayout.BOTTOM, 0.70f, layout.getEditorArea());
}
打开 view

org.eclipsercp.hyperbola/OpenViewAction
public class OpenViewAction extends Action {
private final IWorkbenchWindow window;
private int instanceNum;
private final String viewId;

public OpenViewAction(IWorkbenchWindow window, String viewId) {
    this.window = window;
    this.viewId = viewId;
}

public void run() {
    try {
      window.getActivePage().showView(viewId,
          Integer.toString(instanceNum), IWorkbenchPage.VIEW_ACTIVATE);
          instanceNum++;
    } catch (PartInitException e) {
      // handle exception
    }
}
}
使用 Sticky View

这种 view 在多个 perspective 中保持相同的打开位置,与 editor 类似,其在同于 workbench window 中的多个不同 perspective 中是共享同一个实例的,perspective 切换时不会影响其显示。

org.eclipsercp.hyperbola/plugin.xml
<extension point="org.eclipse.ui.views">
<view
      class="org.eclipsercp.hyperbola.ContactsView"
      icon="icons/groups.gif"
      id="org.eclipsercp.hyperbola.views.contacts"
      name="Contacts"/>
<stickyView
      closeable="false"
      id="org.eclipsercp.hyperbola.ContactsView"
      location="LEFT"
      moveable="false"/>
</extension>
stickyView 只是创建了一个 placeholder,并不是创建实际的 view,它通过 id 来关联一个已存在的 view id。当此 view 打开时,其就变成 sticky view。

创建 Open View 列表菜单

org.eclipsercp.hyperbola/ApplicationActionBarAdvisor
protected void makeActions(IWorkbenchWindow window) {
views = ContributionItemFactory.VIEWS_SHORTLIST.create(window);
}

protected void fillMenuBar(IMenuManager menuBar) {
MenuManager viewsMenu = new MenuManager("Open View", "views");
viewsMenu.add(views);
menuBar.add(viewsMenu);
}
菜单默认显示当前 perspective 定义的 view 列表,这个列表的内容由 IPageLayout.addShowViewShortcut(String) 添加。

使用 Workbench 预定义 View

org.eclipse.ui.ExtensionFactory 类定义了很多 Workbench 预定义的 View、Page、Wizard。

<extension point="org.eclipse.ui.views">
<view
       class="org.eclipse.ui.ExtensionFactory:progressView"
       icon="icons/progress.gif"
       id="org.eclipsercp.hyperbola.views.progress"
       name="Progress"/>
</extension>

参考:
《Eclipse Rich Client Platform Designing, Coding, and Packaging Java Applications》:chapter5、chapter16、chapter17

引用自:
http://hi.baidu.com/monkeyhoop/blog/item/965d28251bbe0035c995596b.html
分享到:
评论

相关推荐

    RCP 常见的扩展点指南

    在打开透视图后,可以看到一个名为 myplugin 透视图的项,选择并打开该选项后,会显示一个空白的 Eclipse 界面。 加入视图(views) ----------------- 视图是 RCP 中的一种重要的扩展点,插件可以通过定义自己的...

    rcp 学习资料下载,一个简单的rcp例子

    在Eclipse RCP中,开发者可以利用工作台(Workbench)、视图(View)、编辑器(Editor)、透视图(Perspective)等核心组件来构建复杂的用户界面。工作台是整个应用程序的中心,负责管理视图和编辑器;视图是显示...

    一个简单的RCP入门教程

    1. **新建一个RCP项目**:在Eclipse中,选择"File" &gt; "New" &gt; "Project",然后在弹出的对话框中选择"Eclipse" &gt; "RCP Application"。 2. **配置应用模型**:在新建项目向导中,指定应用程序的名称、图标等基本信息,...

    eclipse 获得透视图切换事件

    透视图切换事件是Eclipse中一个关键的交互点,它允许用户在多个工作环境之间流畅地切换。这篇博客“eclipse 获得透视图切换事件”探讨了如何捕获和处理这些事件。 在Eclipse插件开发中,我们可以通过监听`...

    RCP入门 View Editor

    你可以创建自定义的EditPart来实现特定的编辑行为,并通过透视图来安排其在工作台窗口中的位置。 **总结** Eclipse RCP提供了一个强大的平台,用于构建功能丰富的桌面应用程序。通过理解并利用RCP中的视图和编辑器...

    RCP 界面布局实例

    在RCP应用中,界面布局通常由多个组件构成,如视图(View)、编辑器(Editor)、透视图(Perspective)等。 视图是RCP界面中的一个重要组成部分,它们展示了应用程序的不同方面,如数据列表、图表或配置选项。视图...

    Rcp一个简单的入门教程

    2. **基本结构**:RCP应用程序基于工作台(Workbench)模型,包括窗口(Window)、透视图(Perspective)、视图(View)和编辑器(Editor)。理解这些基本元素的职责和交互方式是入门的关键。 3. **插件开发**:RCP...

    EclipseRcp 例子程序

    在“Eclipse RCP 例子程序”中,我们可能找到一系列的示例代码和项目,这些示例展示了如何利用Eclipse RCP的各种组件和机制来构建实际的应用。以下是一些关键的知识点: 1. **插件系统**:Eclipse RCP的核心是其...

    eclipse RCP学习项目源码&amp;扩展控制台插件for eclipse3.5

    通过分析这些源码,开发者可以了解到RCP应用的基本结构,包括工作台(Workbench)、视图(View)、编辑器(Editor)、透视图(Perspective)等核心组件。学习如何组织和实现这些组件,可以帮助开发者构建功能丰富的...

    Eclipse RCP.pdf清晰版

    每个Eclipse实例只能打开一个工作空间,但多个工作台窗口可以共享同一个工作空间。 ##### 8. Perspective 透视图定义了页面的布局,例如Java透视图、调试透视图等。每个透视图都有自己的视图和编辑器布局,方便...

    通过例子学习EclipseRCP开发

    2. **Workbench**(工作台):Eclipse RCP应用的核心组件之一,管理多个窗口和透视图。 3. **Perspective**(透视图):一种逻辑布局,用于组织编辑器和视图,为用户提供特定的工作环境。 4. **Editor**(编辑器):...

    RCP源码例子

    4. **透视图(Perspective)**:透视图定义了工作台窗口的布局,它可以包含多个视图和编辑器。这使得用户可以根据自己的需求调整工作环境。 5. **命令(Command)与 Handler**:RCP使用命令模型来处理用户的操作,...

    eclipse RCP入门示例介绍

    每个 Eclipse 实例只能在一个时间使用一个工作空间,但多个 WorkbenchWindow 可以共享同一个工作空间。 8. **Perspective(透视图)**:透视图定义了 WorkbenchWindow 的布局方式,例如 Java 透视图和 Debug 透视...

    eclipse rcp

    2. **Perspective**:透视图是工作台的一个组织单元,它可以包含多个视图和编辑器,并且根据不同的任务或用户需求进行配置。例如,你可以为编程任务创建一个透视图,为数据库查询创建另一个。 3. **View**:视图是...

    Eclipse rcp深入浅出中英文版及配套代码

    5. **透视图(Perspective)**:透视图是工作台中组织视图和编辑器的方式,可以根据不同的工作场景进行切换。 6. **命令(Command)与菜单(Menu)**:Eclipse RCP的命令系统允许动态创建和绑定菜单项,实现了行为...

    Eclipse RCP培训.zip

    Eclipse RCP支持多编辑器打开,可以同时处理多个任务。 5. **命令(Command)与手势(Handler)**:命令是Eclipse RCP中的动作抽象,手势则将命令与用户操作(如鼠标点击、键盘快捷键)关联起来。这种设计使得UI...

    Eclipse RCP开发教程

    RCP 应用程序通常由多个插件组成,每个插件代表应用程序的一个特定功能或组件。这些插件可以互相通信,通过扩展点和扩展实现功能的组合与扩展。 1.2. Eclipse RCP 构建风格 RCP 应用的基础是插件(Plugin),它们...

    Eclipse RCP Plug-in开发自学教程 源码

    总的来说,这个教程通过一系列实际的项目和例子,覆盖了Eclipse RCP插件开发的多个核心概念,包括视图、编辑器、命令、透视图、标记、导航视图、更新管理器以及文本编辑器的实现。通过这些源码,你将能够逐步掌握...

    rcp研究总结

    编辑器在不同透视图中是共享的,而视图则不然。 创建第一个RCP程序,可以通过Eclipse的Plugin Development Environment (PDE) 插件向导生成模板项目。步骤包括新建Plug-in Project,选择“Rich Client Application...

Global site tag (gtag.js) - Google Analytics