【问题标题】:Java Eclipse IStructuredSelection in different ViewParts returns null不同ViewParts中的Java Eclipse IStructuredSelection返回null
【发布时间】:2016-04-07 08:08:47
【问题描述】:

起初我在 StackOverflow 上查看了关于 IStructuredSelection 的其他主题,但它们并没有解决我的问题。

所以我有 2 个视图。在这两个视图中,我都有一个 TreeViewer 并实现了 getSite().setSelectionProvider(viewer);

在 MainView 中一切正常,当我点击 TreeNode注意:这些 TreeNode 来自自定义类,假设为 myTreeNode)@987654327 @ 得到更新,我的弹出窗口 menu 使用不同的处理程序调用正确的函数。

其中一个函数在另一个View 中创建一个新的TreeItem,它应该在不同的列中显示一些值。这些值每秒更新一次。这部分也正常工作。

但是现在问题出现了。当我单击TreeItem 之一时,PropertiesView 没有得到更新,并且弹出菜单处理程序也无法正常工作。 IStructuredSelection strucSelection = (IStructuredSelection) selection; 总是返回 null

这是我的getAdapter 适配器中的PropertiesView 方法:

@Override
public Object getAdapter(Object adaptableObject, Class adapterType)
{
    if(adapterType == IPropertySource.class && adaptableObject instanceof UATreeNode)
        return new UATreeNodeAdapter((UATreeNode) adaptableObject);
    else if(adapterType == IPropertySource.class && adaptableObject instanceof TreeItem)
    {
        MainView.printOnOPCUAConsole(OPCUAConsoleMessageTypeEnum.NULL, "Instanceof TreeItem");
        return new TreeItemAdapter((TreeItem) adaptableObject);
    }
    else if(adapterType == IPropertySheetPage.class)
    {
        if(propertyPage == null)
            propertyPage = new PropertySheetPage();
        return propertyPage;
    }
    return null;
}

这是我的Handler,当打开第二个视图中的menu并执行命令时应该调用它:

@Override
public Object execute(ExecutionEvent event) throws ExecutionException
{
    ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event).getSelectionService().getSelection();
    if(selection instanceof IStructuredSelection)
    {
        IStructuredSelection strucSelection = (IStructuredSelection) selection;

        if(strucSelection.getFirstElement() != null)
        {
            TreeItem treeItem = (TreeItem) strucSelection.getFirstElement();
            UaSubscription uaSubscription = (UaSubscription) treeItem.getData("uaSubscription");

        }
    }
    return null;
}

在这两种情况下,选择都是空的,但我可以看到选择了某些东西,因为否则我认为popup menu 不会显示。

所以我现在的问题是,有人知道如何从我的第二个View 中获得选择吗?我做错了什么?

【问题讨论】:

  • 这表明您的 setSelectionProvider 调用第二个视图有问题,或者其他可能是活动部分。
  • 在第二个视图中,我还将 treeViewer 传递给 setSelectionProvider。我认识到,当第二个视图获得焦点时,查看器的第一个元素始终是“自动选择的”并且我的 SelectionChangedListener 被触发。但是在这里我有同样的问题,event.getSelection(); 返回 null。

标签: java eclipse view selection


【解决方案1】:

好的,我通过实现自己的元素解决了这个问题,并通过ContentProvider 将它们提供给TreeViewer。 然后我在plugin.xml中为adapter-extension添加了一个新的adaptableType(新创建的类),并将新的Class添加到adapter-factory中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2023-03-19
    • 2014-07-28
    • 1970-01-01
    • 2015-06-04
    • 2019-08-25
    • 2016-05-28
    相关资源
    最近更新 更多