如何从 Eclipse 插件中获取包资源管理器中的选定节点

Posted

技术标签:

【中文标题】如何从 Eclipse 插件中获取包资源管理器中的选定节点【英文标题】:How to get the selected node in the package explorer from an Eclipse plugin 【发布时间】:2010-10-09 19:19:58 【问题描述】:

我正在编写一个 Eclipse 命令插件,并希望在包资源管理器视图中检索当前选定的节点。我希望能够从返回的结果中获取所选节点驻留在文件系统上的绝对文件路径(即 c:\eclipse\test.html)。

我该怎么做?

【问题讨论】:

【参考方案1】:

第一步是获得选择服务,例如从像这样的任何视图或编辑器:

ISelectionService service = getSite().getWorkbenchWindow()
            .getSelectionService();

或者,as VonC wrote,如果您不在视图或编辑器中,您可以通过 PlatformUI 获取它。

然后,获取 Package Explorer 的选择并将其转换为 IStructuredSelection:

IStructuredSelection structured = (IStructuredSelection) service
            .getSelection("org.eclipse.jdt.ui.PackageExplorer");

从中,您可以获得您选择的 IFile:

IFile file = (IFile) structured.getFirstElement();

现在要获取完整路径,您必须获取 IFile 的位置:

IPath path = file.getLocation();

然后您最终可以使用它来获取文件的真实完整路径(除其他外):

System.out.println(path.toPortableString());

您可以在此处找到有关选择服务的更多信息:Using the Selection Service。

【讨论】:

"查看了 9 次"...没有人看这些问题 ;) 无论如何,非常详细的答案。 +1 从包资源管理器中获取选择时,如果 IFile 元素不是实例。你需要进行JDT->资源转换。 @kberg 演员阵容确实引发了异常。但是你是什么意思执行JDT->资源转换 “org.eclipse.jdt.ui.PackageExplorer”在哪里定义为常量?不喜欢魔线。【参考方案2】:

代码如下:

IWorkbenchWindow window =
    PlatformUI.getWorkbench().getActiveWorkbenchWindow();
ISelection selection = window.getSelectionService().getSelection("org.eclipse.jdt.ui.PackageExplorer");

您在类似 LuaFileWizardAction class 的 Action 中查看示例。

【讨论】:

您与 LuaFileWizardAction 类的链接似乎已损坏。它重定向到blackducksoftware.com

以上是关于如何从 Eclipse 插件中获取包资源管理器中的选定节点的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse 项目资源管理器中的包内创建子包

如何防止 Eclipse 在包资源管理器中显示打开的文件

Eclipse - 在项目/包资源管理器中更改字体大小

Eclipse隐藏项目包,以便在包资源管理器中轻松导航

如何让 Eclipse 显示 .* 文件?

Resharper中的扩展管理器中搜索不到我要下载的插件?