java - eclipse RCP :how to pass selection into handler

标签 java eclipse-plugin swt eclipse-rcp jface

我的 ecp 应用程序中有一个 View 部分,它只包含一个 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);

Action 提供者示例:

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;
    }

}

cn.ggfan.dmp.commands.addCP 是一个定义的命令,它有一个 defaultHandler,源字段是右键单击的节点,现在我的问题是如何将源字段传递给处理程序?正如你所看到的,我正在尝试这样做:

HashMap<String, Object> paras = new HashMap<String, Object>();
        paras.put("source", this.source);
        cp.parameters = paras;

但它不起作用。

最佳答案

  1. 您需要将 Tree/Table Viewer 设置为 SelectionProviderPartSite

IWorkbenchSite.java

 public void setSelectionProvider(ISelectionProvider provider);
  1. 您的命令处理程序代码,您有以下方法

公共(public)对象执行(ExecutionEvent事件)抛出ExecutionException

使用ISelection Selection = HandlerUtil.getCurrentSelectionChecked(event);

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

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

org.eclipse.ui.ISourceProvider

您有责任更新提供商 map 。这是示例引用

http://www.vogella.com/articles/EclipseCommandsAdvanced/article.html

关于java - eclipse RCP :how to pass selection into handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976567/

相关文章:

java - 不能将父类型用作变量类型,但仍可以接收子类型

java - eclipse -> 代码模板 有哪些可用变量?

java - 如何从 Sonar 分析中排除一些 Maven 项目

java - 使用 swt.arrow 和图像创建按钮

java - Eclipse 中带有 WindowBuilder 的应用程序窗口

java - JerseyTest 字段在资源中变为 NULL

java - Rapidclipse - 使用过滤器在一个屏幕上选择多个窗口

java - 如何删除 JFrame 中的空白区域?

java - 删除导出的 Eclipse 产品的部件描述符错误

java - SWT:如何通过选择文件来打开资源管理器?