我有简单的要求:我的应用程序包含2个MParts。一个MPart包含TreeView中显示的ID列表。通过单击任何ID,另一个MPart应该在TableView中填充/显示与所选ID(来自DB)相关的数据。
我写了,第一个MPart,它在TreeView中显示ID。单击捕获用户选择的ID并从DB检索与该ID相关的数据。使用EPartService,我得到了第二个MPart的参考。但无法修改其TableView。 (最初,我使用空行填充此TableView。默认)。基本上我试图从第1个Mpart修改第2个Mpart。
我是初学者,尝试过网上提供的所有相关帖子。请指出正确的方向
答案 0 :(得分:0)
如果您拥有表格视图的MPart
,则可以致电getObject()
以获取您的观看类:
MPart tableViewPart = ....
MyTableView view = (MyTableView)tableViewPart.getObject();
// TODO call some method of MyTableView to set the table
其中MyTableView
是您为Application.e4xmi中的视图部件定义的类。
注意:如果尚未显示该部件,则该对象将为null。使用EPartService.showPart
显示零件并创建对象。
答案 1 :(得分:0)
在下面的回答中,我将假设您正在谈论JFace TreeViewer
和TableViewer
。如果您正在谈论JavaFX TreeView
和TableView
,则需要使用不同的方式捕获选择事件,但ESelectionService
的使用情况保持不变。
设置选择
在具有树的部分中,您可以使用依赖注入来获取ESelectionService
@Inject private ESelectionService selectionService;
然后,您可以向ISelectionChangedListener
添加TreeViewer
,然后将选择转发给选择服务。
ISelectionChangedListener selectionListener = new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
selectionService.setSelection(selection);
}
};
treeView.addSelectionChangedListener(selectionListener);
您可以直接使用您的ID,而不是将IStructuredSelection
推送到上下文,即使用selection.getFirstElement()
。
观察选择
在显示详细信息的表格的部分中,您可以注入当前选择。每次选择更改时都会调用此方法。
@Inject
public void setSelection(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional Object selection) {
// process the selection
}
请注意此处使用@Optional
。这将确保在活动选择为null
时调用该方法。
更多信息
有关ESelectionService
的更多信息,请参阅本教程:
http://eclipsesource.com/blogs/tutorials/eclipse-4-e4-tutorial-part-7-services/