【问题标题】:Get TreeViewer in RCP from another Plugin从另一个插件获取 RCP 中的 TreeViewer
【发布时间】:2017-06-03 22:07:32
【问题描述】:

我正在为 Eclipse-RCP 开发插件。还有另一个带有 TreeViewer 的插件,我想从我的插件中选择一个项目。我不知道如何访问它,这甚至可能吗?

我认为可以通过以下方式获得正确的观点:

IViewReference home;
    IViewReference [] viewRefs = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences();
    for (int i = 0; i < viewRefs.length; i++) {
        if(viewRefs[i].getId()==myid){
            home = viewRefs[i];
            break;
        }
    }

但是 home 不是 TreeViewer,我不能投射它。如何获取 TreeViewer?

home.getTreeViewer() //Doesn't work cause of casting issues

我是 rcp 的新手,所以我很乐意解释一下。

【问题讨论】:

    标签: java eclipse-rcp


    【解决方案1】:

    您需要使用以下方法找到您的视图:

    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
    
    IViewPart viewPart = page.findView("your view id");
    

    然后您可以将视图部分转换为您的视图类并调用您在该类上编写的方法:

    if (viewPart != null) {
       MyViewClass myViewPart = (MyViewClass)viewPart;
    
       myViewPart.getTreeViewer();
    }
    

    MyViewClass 是你的 ViewPart 类。您必须编写 getTreeViewer 方法。

    如果视图当前未打开,您可以使用showView

    viewPart = page.showView("your view id");
    

    【讨论】:

    • 如果我创建 page.findView(id),我得到 null 作为回报,但我调试它并看到页面中是一个具有正确 id 的视图
    • 那么视图真的打开了吗?如果它没有打开,您将不得不改用showView - 请参阅更新的答案。如果具有该 id 的视图打开,findView 肯定可以工作。
    • 向我们展示 plugin.xml 中视图的 org.eclipse.ui.views 声明以及您在 findView 中使用的 id。
    • showView() 使用相同的 id,但相同的视图会像我已经打开的那样打开。我会尝试解决这个问题。我为另一个程序制作了一个插件,但我无权访问另一个视图的源代码和 plugin.xml。文档也不完整
    • 此解决方案适用于 Eclipse 3.x。不能申请4.x
    【解决方案2】:

    您必须将home 转换为您的其他视图的类型。然后你就可以得到TreeViewer了。

    【讨论】:

      【解决方案3】:

      您可以使用IWorkbenchPage#findView(java.lang.String) 直接从您的活动IWorkbenchPage 中找到 ViewPart。

      如果您有要选择的对象,请获取视图的站点,获取站点的选择提供程序,然后告诉选择提供程序应该选择什么(使用包含该对象的 StructuredSelection 实例)。这仅在树或部件中的任何内容(您不必关心或知道它是一棵树)实际上包含您告诉它选择的对象时才有效。

      【讨论】:

        猜你喜欢
        • 2017-06-25
        • 2012-10-09
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多