Eclipse 如何在Eclispe e4 RCP中将对象从一个零件传递到另一个零件?

Eclipse 如何在Eclispe e4 RCP中将对象从一个零件传递到另一个零件?,eclipse,eclipse-rcp,e4,Eclipse,Eclipse Rcp,E4,我正在用Eclipse4RCP构建一个应用程序。我有一个导航器(类似于EclipseIDE中的导航器),我想将它链接到一个编辑器(类似于EclipseIDE中导航器中的文件链接到编辑器的方式)。当前,当用户双击导航器树中的文件时,我使用EPartService打开我的编辑器部分(通过创建一个新实例)。但是我想给它传递一个参数(字符串或对象),让它知道在编辑器中打开哪个文件。我希望能够为导航器树的不同节点打开多个编辑器。我在互联网上做了很多研究,但没有找到解决办法。我认为这是一个常见的问题,e4框

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

viewer.addDoubleClickListener(事件->{
最终IStructuredSelection=(IStructuredSelection)事件。getSelection();
FileNode file=null;
布尔partExists=false;
if(FileNode的selection.getFirstElement()实例){
file=(FileNode)selection.getFirstElement();
for(MPart part1:partService.getParts()){
if(part1.getLabel().equals(file.getName())){
partService.showPart(part1,PartState.ACTIVATE);
partExists=true;
打破
}
}
如果(!partExists){
MPart part2=partService
.createPart(“com.parts.partdescriptor.fileeditor”);
part2.setLabel(file.getName());
partService.showPart(part2,PartState.ACTIVATE);
}
}
});

是否可以说类似part2.setParameter(“PARAM_NAME”,“FILE_NAME”)

当您有
MPart
时,您可以调用:

MPart-MPart=。。。
MyClass MyClass=(MyClass)mpart.getObject();
获取部件的类(Application.e4xmi中部件的“class URI”中定义的类)。然后可以调用在零件类上定义的任何方法

您还可以在零件的“瞬态数据”区域中设置数据:

mpart.getTransientData().put(“键”、“数据”);
对象数据=mpart.getTransientData().get(“键”);

感谢您的快速回复。我想补充一点,getObject()方法仅在渲染零件后返回非null。因此,如果我想传输要在编辑器中呈现的数据,例如文本字段中的文件名,那么它将被创建为空,然后我必须稍后在通过getObject()检索的mpart对象上调用的方法中设置文本。在这种情况下,最好使用“瞬态数据”。“瞬态数据”或“getObject”哪种方法更好?或者它们是相同的,这取决于具体情况?如果要在渲染之前进行设置,请使用瞬态数据。这就是我在启动编辑器部件时所做的。我使用下面的代码来获取我放入瞬态数据中的对象(来自另一个部件)。对吗?MPart part=partService.getActivePart();Object Object=part.getTransientData().get(Constants.INPUT_KEY);是partService.getActivePart();就像part类中的“this”一样?通常您只需在类中注入MPart。