如何通过从其他Mpart中选择TreeViewer的一个子项,将数据加载到一个MPart的TableView中

时间:2015-06-21 15:48:52

标签: java eclipse-rcp e4

我有简单的要求:我的应用程序包含2个MParts。一个MPart包含TreeView中显示的ID列表。通过单击任何ID,另一个MPart应该在TableView中填充/显示与所选ID(来自DB)相关的数据。

我写了,第一个MPart,它在TreeView中显示ID。单击捕获用户选择的ID并从DB检索与该ID相关的数据。使用EPartService,我得到了第二个MPart的参考。但无法修改其TableView。 (最初,我使用空行填充此TableView。默认)。基本上我试图从第1个Mpart修改第2个Mpart。

我是初学者,尝试过网上提供的所有相关帖子。请指出正确的方向

2 个答案:

答案 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 TreeViewerTableViewer。如果您正在谈论JavaFX TreeViewTableView,则需要使用不同的方式捕获选择事件,但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/