4

我试图在 Eclipse e4 应用程序中获取视图部件的实例,但我找不到 PlatformUI 类。自 Eclipse 3 以来名称是否已更改,还是位于不同的包中?

4

2 回答 2

11

查看Eclipse e4 Parts时:

e4 部分

371405这样的错误可能很有启发性:

org.eclipse.ui.presentations

这个 API 在 4.2 中不再工作,我们也从未打算让它工作。
它与 4.2 中的可插拔渲染故事不兼容。以前可以由演示扩展做出的决定现在由渲染器决定。

需要弃用的受影响 API:

  • 整个 API 包:org.eclipse.ui.presentations
  • 延伸点:org.eclipse.ui.presentationFactories
    org.eclipse.ui.IWorkbenchPreferenceConstants#PRESENTATION_FACTORY_ID
    org.eclipse.ui.IWorkbenchWindowConfigurer#getPresentationFactory
    org.eclipse.ui.IWorkbenchWindowConfigurer#setPresentationFactory

教程的其余部分解释了如何声明“部分”(编辑器或视图)


OP August Karlstrom提到:

这曾经有效:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("‌​some view");

使用像 PlatformUI 这样的单例是一种不好的做法,也是在 e4 中引入Context的原因之一。请参阅有关 Context 的演示文稿


Paul Webster(IBM Eclipse 平台团队成员)评论:

在 Eclipse4 中,您将使用按 IDorg.eclipse.e4.ui.workbench.modeling.EPartService.findPart(String)查找。包含在其对象属性中的注入部分 。MPart
MPart

作为Workbench_Services页面的详细信息:

在 e4 中,将不存在工作台页面的概念。部件服务 API本质上是现有 3.x和接口
的合并。IPartServiceWorkbenchPage


请注意,这并不理想,如错误 372488所示(在此线程之后):

一个MPartfor anMPartDescriptor是用 来创建的EPartService.createPart(descriptor_id),其中descriptor_id 是 的标识符MPartDescriptor
这部分可以再次找到EPartService.findPart(descriptor_id)-如果只有一个

MPart问题是,一个人可能需要为一对一创建多个MPartDescriptor
编辑器可能是一个例子:一个人可能想要编辑同一种类型的不同实例。

MPart为给定创建多个MPartDescriptor是可能的,但是没有方便的方法来找到这些部分。
EPartService.findPart(descriptor_id)将返回MPart为特定创建的第一个MPartDescriptor,即使有多个。
因此,对于给定的 MPartDescriptor,存在三个问题:

  1. EPartService.findPart(id)不说不止一个MPart
  2. 没有方便的方法来获取MParts此描述符的所有内容。
  3. 没有 API 方式来获取MPart给定描述符和“内容”或“参考”的特定信息。

目前要走的路是使用EPartService.getParts()which 不幸地返回所有MParts,而不仅仅是那些对应于一个特定的 s MPartDescriptor
然后需要检查是否有一个MPart针对MPartDescriptor具有特定“内容”的特定内容。

因此,缺少一些可以找到 具有特定“内容”或“参考”MPart的给定的东西。MPartDescriptor

于 2012-05-12T02:27:23.523 回答
5

只是有同样的问题。找到此线程并尝试使用后:

MPart mPart = epartService.findPart("MyPart");

MyPart myPart = (MyPart)mPart.getObject();

然后我得到了我的观点。

于 2013-11-26T01:02:03.943 回答