【发布时间】: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