【问题标题】:Selecting a resource programatically in Eclipse does not expand tree在 Eclipse 中以编程方式选择资源不会展开树
【发布时间】:2018-05-15 14:14:37
【问题描述】:

我的 RCP Eclipse 应用程序存在以下问题:我正在尝试在 Project Explorer 树中的 IResource 上设置选择。 我使用的代码是:

最终 IWorkbenchPage 页面 = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); 最终 IViewPart viewPart = page.findView(IPageLayout.ID_PROJECT_EXPLORER); 最终 ISelectionProvider selProvider = viewPart.getSite().getSelectionProvider(); selProvider.setSelection(new StructuredSelection(mrcReportRuleOccurrence.getIResource()));

代码似乎只有在叶子已经在树中展开过一次时才有效。如果树完全折叠,代码不会使 eclipse 展开包含文件夹并在项目资源管理器中选择所需的文件。有人知道如何实现吗?

【问题讨论】:

    标签: java eclipse rcp


    【解决方案1】:

    您可以尝试检查选择提供程序是否为Viewer 并使用setSelection(selection. reveal) 方法:

    if (selProvider instanceof Viewer) {
      ((Viewer)selProvider).setSelection(selection, true);
    }
    

    可能还需要使用TreeSelectionTreePath 进行选择,而不仅仅是StructuredSelection

    TreePath path = new TreePath(.... array of objects ...);
    
    TreeSelection selection = new TreeSelection(path);
    

    其中“对象数组”是通过树到资源的路径。

    但是在不同视图的树中选择项目并不是ISelectionProvider 接口的用途。不保证可以使用此接口完成此操作。

    【讨论】:

    • 实例检查和 setSelection 似乎没有区别。至于 TreeSelection,我无法从 IResource 获得 TreeSelection...
    • 您不会从 IResource 获得 TreeSelection,而是使用 TreePath 构建它。我不确定项目浏览器到底想要什么。在答案中添加了更多内容。
    • 我已成功修改代码以接收树选择,但仍显示完全相同的行为,如果树未打开,则不会选择元素。如果用户手动展开树至少一次,即使树被折叠,代码也会跳转到元素。
    • 好吧,你也许可以用expandToLevel 做点什么,但这不是选择提供程序接口的用途,也不能保证这是可能的。
    • Viewer 类和选择提供者都没有提供 expandToLevel 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2014-01-12
    • 1970-01-01
    相关资源
    最近更新 更多