如何从Eclipse插件中的Package Explorer获取所选节点

18

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

我该如何实现这一功能?

2个回答

33

第一步是获取选择服务,例如从任何视图或编辑器中获取,如下所示:

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

或者,正如VonC所写的那样, 如果你既不在视图中也不在编辑器中,你可以通过PlatformUI获取它。

然后,获取包资源管理器的选择并将其转换为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());

您可以在此处找到有关选择服务的更多信息:使用选择服务


1
被浏览了9次...似乎没有人看这些问题 ;) 无论如何,回答非常详细。+1 - VonC
4
从包资源管理器获取选择时,元素不是 IFile 的实例。 您需要执行 JDT->资源转换。 - kberg
@kberg 强制转换确实会抛出异常。但是你所说的执行JDT->资源转换是什么意思? - Fofole
“org.eclipse.jdt.ui.PackageExplorer” 常量的定义在哪里?不喜欢神奇字符串。 - Pétur Ingi Egilsson

16

代码应该是这样的:

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

您可以通过以下方式在操作中查看示例 LuaFileWizardAction类


你链接到LuaFileWizardAction类的链接似乎已经失效了。它重定向到http://www.blackducksoftware.com/。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接