【问题标题】:Eclipse Plugin: Pass values from one View to other ViewEclipse 插件:将值从一个视图传递到另一个视图
【发布时间】:2012-07-14 08:08:40
【问题描述】:
我写了一个插件,在视图中集成了prefuse (org.eclipse.ui.views)。第二步,我编写了一个命令菜单并将其添加到 Package Explorer 的上下文菜单中。当我右键单击资源管理器包视图中的任何包时,它会显示菜单。当我单击它时,该命令的 Handler 类将包中的所有 Java 类路径保存到一个列表中。
我现在的问题是,如何将更新后的 List 传递给初始化我的 prefuse 类的视图。
我忘了说这是我第一次写 eclipse 插件。也许有更好的方法来做到这一点。
谢谢
【问题讨论】:
标签:
java
eclipse
plugins
view
package-explorer
【解决方案1】:
你插件的 plugin.xml 可能定义了两件事:
- 包资源管理器的上下文菜单贡献
- 应该接收列表的视图
当从包资源管理器调用您的菜单贡献时,您的视图可能已经打开,也可能未打开。如果它已经打开,您希望将数据从菜单命令发送到视图,因此您需要获取对视图的一些引用。如果视图尚未打开,则该命令应打开视图,然后将数据发送到视图。
这两种情况都可以用同样的方法解决。
例如以下来自的信息
Programmatically showing a View from an Eclipse Plug-in
您可以激活视图,无论它是否已经可见。 IWorkbenchPage#showView(id-of-your-view) 方法将返回对您的视图的引用,因此您可以将其转换为您的视图类型并调用其方法,例如包括一些接收您要在视图中显示的列表的方法。
【解决方案2】:
我会在你的插件中使用 Activator 类。在某些时候,Eclipse 将通过在您的插件中构造一个 Activator 类的实例来启动您的插件。始终可以使用 Activator 上的 getDefault() 类方法来引用该实例。
当您的视图被初始化时,它可以将自己注册到 Activator 实例(有一个实例变量来保存对视图对象的引用)。当您的 Handler 有一个列表要提供给视图时,该处理程序可以向 Activator 的默认实例请求视图对象,然后可以直接发送该列表。
如果您将处理程序放在与视图不同的插件中,则可以使一个插件成为另一个插件的依赖项。然后第二个插件可以访问第一个插件中的类,其中包括第一个插件的 Activator 类。