如何在Eclispe e4 RCP中将对象从一个部分传递到另一个部分?

时间:2015-05-19 14:03:45

标签: eclipse eclipse-rcp e4

我正在使用eclipse e4 RCP构建应用程序。我有一个导航器(类似于eclipse IDE中的Navigator),我想将它链接到一个编辑器(类似于eclipse IDE中Navigator中的文件如何链接到编辑器)。目前,当用户双击导航器树中的文件时,我正在使用EPartService打开我的编辑器部件(通过创建新实例)。但是我想传递一个参数(一个String或一个Object)来让它知道在编辑器中打开哪个文件。我希望能够为导航器树的不同节点打开多个编辑器。我在互联网上做了很多研究,但找不到解决方案。我认为这是一个常见问题,e4框架应提供一种机制,将这些参数从一个部件传递到另一个部件。目前的代码如下:

viewer.addDoubleClickListener(event -> {
        final IStructuredSelection selection = (IStructuredSelection) event.getSelection();
        FileNode file = null;
        boolean partExists = false;
        if (selection.getFirstElement() instanceof FileNode ) {
            file = (FileNode ) selection.getFirstElement();
            for (MPart part1 : partService.getParts()) {
                if (part1.getLabel().equals(file.getName())) {

                    partService.showPart(part1, PartState.ACTIVATE);
                    partExists = true;
                    break;
                }
            }
            if (!partExists) {
                MPart part2 = partService
                        .createPart("com.parts.partdescriptor.fileeditor");
                part2.setLabel(file.getName());
                partService.showPart(part2, PartState.ACTIVATE);
            }
        }
    });

是否可以说像part2.setParameter(“PARAM_NAME”,“FILE_NAME”); ?

1 个答案:

答案 0 :(得分:3)

如果您有MPart,可致电:

MPart mpart = ...

MyClass myClass = (MyClass)mpart.getObject();

获取部分的类(在'类URI中定义的类'用于Application.e4xmi中的部分)。然后,您可以调用已在零件类上定义的任何方法。

您还可以在“瞬态数据”中设置数据。部分区域:

mpart.getTransientData().put("key", "data");

Object data = mpart.getTransientData().get("key");