Eclipse RCP:来自另一个视图的TableViewer setInput

时间:2014-10-27 17:53:08

标签: java eclipse-rcp jface tableviewer

我的RCP项目中有几个观点。

在一个视图中,我有TableViewer

在另一个视图中,我有JFrame Button

我想在另一个视图中按下按钮时使用TableViewer方法更新setInput()中的数据。

我该怎么做?

编辑:

表格查看器的初始输入:

tableViewer.setContentProvider(ArrayContentProvider.getInstance());
tableViewer.setLabelProvider(new TableLabelProvider() );
tableViewer.setInput(TraceData.getTraceData());     // get realtime data

我将监听器添加到tableViewer以监听GUI中的更改

listener = new ISelectionListener() {
    public void selectionChanged(IWorkbenchPart part, ISelection sel) {
       if (!(sel instanceof IStructuredSelection))
          return;
       IStructuredSelection ss = (IStructuredSelection) sel;
       Object o = ss.getFirstElement();
       if (o instanceof Book) // something else in place of Book
          tableViewer.setInput(TraceData.getSavedTraceData());
    }
 };

getSite().getPage().addSelectionListener(listener);

问题是如何让它对另一个视图中的按钮事件做出反应?这就是如何播放JButton新闻事件,然后在TreeViewer中听取该事件。

1 个答案:

答案 0 :(得分:1)

在我的RCP应用程序中,我有一个由所有其他人扩展的View类。在这个视图中我有:

abstract void refresh();

现在,您必须使用TableViewer的视图的refresh方法。

@Override
public void refresh() {
    tableViewer.setInput(...);
    tableViewer.refresh();
}

您必须从按钮

调用刷新方法

如何从另一个人访问视图。

final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
final IWorkbenchPage page = window.getActivePage();
try {
    if (page.getActivePart() != null) {
    viewTitle = page.getActivePart().getTitle();
    IViewPart view = page.showView(MainView.ID)  //id de la view in plugin.xml
    page.hideView(page.findView(SitesView.ID));
    }