2014-10-27 75 views
0

我在我的RCP項目中有幾個視圖。Eclipse RCP:TableViewer setInput從另一個視圖

在一個視圖中,我有一個TableViewer

在另一種觀點,我有一個JFrameButton

我想在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

在我的RCP應用程序中,我有一個由所有其他擴展的View類。在這個視圖中,我有:

abstract void refresh(); 

現在,您必須使用TableViewer的視圖刷新方法。

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

而且你必須從按鈕

如何訪問從anotherone視圖調用刷新方法。

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)); 
    } 
+0

不完全是我的意思。我編輯了我的帖子來澄清事情。 – 2c00L 2014-10-27 18:50:03

+0

我會使用View view =(View)page.findView(View.ID);訪問視圖然後刷新方法。爲我工作。但是,這可能不是最好的方式。 – 2014-10-27 19:05:35

+0

感謝您的回覆。我無法找到page.findView()方法。我也認爲聽衆是最好的方式。 – 2c00L 2014-10-29 14:05:52