Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EclipseRCP:如何将选择传递给处理程序_Java_Eclipse Plugin_Swt_Eclipse Rcp_Jface - Fatal编程技术网

Java EclipseRCP:如何将选择传递给处理程序

Java EclipseRCP:如何将选择传递给处理程序,java,eclipse-plugin,swt,eclipse-rcp,jface,Java,Eclipse Plugin,Swt,Eclipse Rcp,Jface,我的ecp应用程序中有一个视图部分,它只包含一个TreeViewer 每个树节点都有一个操作提供程序,当右键单击节点时,该提供程序将为上下文菜单提供帮助: MenuManager menuManager = new MenuManager(); menuManager.addMenuListener(new IMenuListener(){ @Override public void menuAboutToShow(IMenuMa

我的ecp应用程序中有一个视图部分,它只包含一个
TreeViewer

每个树节点都有一个操作提供程序,当右键单击节点时,该提供程序将为上下文菜单提供帮助:

MenuManager menuManager = new MenuManager();
        menuManager.addMenuListener(new IMenuListener(){

            @Override
            public void menuAboutToShow(IMenuManager manager) {
                IStructuredSelection is = (IStructuredSelection)treeViewer.getSelection();
                if(is.isEmpty()){
                    return;
                }else{
                    Node node = (Node)is.getFirstElement();
                    IActionProvider provider  = node.getActionProvider();
                    IContributionItem[] actions = provider.getActions();
                    if(actions.length == 0){
                        return;
                    }else{
                        for(IContributionItem action : actions){
                            manager.add(action);
                        }
                    }
                }
            }

        });
        Menu menu = menuManager.createContextMenu(treeViewer.getTree());
        menuManager.setRemoveAllWhenShown(true);
        treeViewer.getTree().setMenu(menu);
        getSite().registerContextMenu(menuManager, treeViewer);
        getSite().setSelectionProvider(treeViewer);
操作提供程序示例:

public class CPSActionProvider implements IActionProvider {
    private Object source;

    @Override
    public void setInitializationData(IConfigurationElement config,
            String propertyName, Object data) throws CoreException {
        // TODO Auto-generated method stub

    }

    @Override
    public IContributionItem[] getActions() {
        CommandContributionItemParameter cp = new CommandContributionItemParameter(
                PlatformUI.getWorkbench().getActiveWorkbenchWindow(),
                null, "cn.ggfan.dmp.commands.addCP",
                CommandContributionItem.STYLE_CHECK);
        HashMap<String, Object> paras = new HashMap<String, Object>();
        paras.put("source", this.source);
        cp.parameters = paras;
        CommandContributionItem add = new CommandContributionItem(cp);
        //add.setId("cn.ggfan.dmp.commands.addCP");
        return new IContributionItem[] { add };
    }

    @Override
    public void setSource(Object o) {
        // TODO Auto-generated method stub
        this.source = o;
    }

}
但它不起作用

  • 您需要将
    树/表查看器设置为
    SelectionProvider
    PartSite
  • IWorkbenchSite.java

     public void setSelectionProvider(ISelectionProvider provider);
    
  • 您的命令处理程序代码,您有以下方法
  • 公共对象执行(ExecutionEvent事件)引发ExecutionException

    使用ISelection selection=HandlerUtil.getCurrentSelectionChecked(事件)

    ////////////////////////////////////////////////////////////////////////////////////

    如果不提供SourceProvider,还有另一种方法。您可以实现自己的

    org.eclipse.ui.ISourceProvider
    
    更新提供商地图是您的责任。这是样品参考


    我知道这种方法,我只是在寻找更好的方法。更新了我的答案。我只是想明白你说的更好的方式是什么意思!
    org.eclipse.ui.ISourceProvider