1

我编写了一个在视图中集成了prefuse的插件(org.eclipse.ui.views)。第二步,我编写了一个命令菜单并将其添加到 Package Explorer 的上下文菜单中。当我右键单击资源管理器包视图中的任何包时,它会显示菜单。当我单击它时,该命令的 Handler 类将包中的所有 Java 类路径保存到一个列表中。我现在的问题是,如何将更新后的 List 传递给初始化我的 prefuse 类的视图。我忘了提到这是我第一次编写 eclipse 插件。也许有更好的方法来做到这一点。

谢谢

4

2 回答 2

2

您的插件的 plugin.xml 可能定义了两件事:

  1. 包资源管理器的上下文菜单贡献
  2. 应该接收列表的视图

从包资源管理器调用您的菜单贡献时,您的视图可能已经打开,也可能未打开。如果它已经打开,您希望将数据从菜单命令发送到视图,因此您需要获取对视图的一些引用。如果视图尚未打开,则该命令应打开视图,然后将数据发送到视图。

这两种情况都可以用同样的方法解决。

例如,按照 Programmatically shows a View from an Eclipse Plug-in 中的信息, 您可以激活该视图,无论它是否已经可见。该方法IWorkbenchPage#showView(id-of-your-view)将返回对您的视图的引用,因此您可以将其转换为视图的类型并调用其方法,例如包括一些接收您要在视图中显示的列表的方法。

于 2012-07-15T04:45:10.887 回答
1

我会在你的插件中使用 Activator 类。在某些时候,Eclipse 将通过在您的插件中构造一个 Activator 类的实例来启动您的插件。始终可以使用 Activator 上的 getDefault() 类方法来引用该实例。

当您的视图被初始化时,它可以将自己注册到 Activator 实例(有一个实例变量来保存对视图对象的引用)。当您的 Handler 有一个列表要提供给视图时,处理程序可以向 Activator 的默认实例请求视图对象,然后可以直接发送列表。

如果您将处理程序放在与视图不同的插件中,则可以使一个插件成为另一个插件的依赖项。然后第二个插件可以访问第一个插件中的类,其中包括第一个插件的 Activator 类。

于 2012-07-14T23:14:58.263 回答