簡體   English   中英

SWT 表、TableViewer、數據更改時刷新表

[英]SWT Table, TableViewer, Refreshing Table on Data Change

我非常需要一些指導幫助。 我已經能夠完成並開始使用 Tables 和 TableViewers 的代碼示例。 但是我沒有找到任何示例來幫助我進行粒子設置。

請指導我正確的方向。

我的課程:

AHandler.java - 這允許用戶從鼠標右鍵單擊中選擇數據。 在執行過程中,我調用了一個單例類來將用戶選擇的數據添加到一個數組列表中。

ASelectedData.getInstance().add(tcRevision, selectedDataset);

ASelectedData.java - 是將用戶選擇添加到 ArrayList 的單例類。

ABase.java - 此對話框通過單擊菜單打開。 該對話框應顯示一個表,其中包含來自 ArrayList 的值。 執行其他操作的一些按鈕。

我現在擁有它的方式是在 ABase.java 類中創建表和 tableviewer。 我正在從中提取表格的信息。

 viewer.setContentProvider(new ArrayContentProvider());
 viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());

這將使用正確的數據填充表。

但是 ABase.java 類是無模型的。 那么為什么該對話框是打開的,用戶可以繼續使用鼠標右鍵選擇數據並添加到數組列表中。 但是我對表格進行編碼的方式我必須重新打開窗口才能更新數據。

* 編輯* ***在我的主 GUI 中,我創建了一個 TableViewer。 TableViewer 創建一個表,在單獨的類中顯示來自數組列表的數據。 問題是用戶仍然可以轉到主應用程序 GUI(不是我的應用程序 GUI)並在我的 GUI 仍然打開時選擇更多數據。 他們希望在選擇表時看到添加到表中的新數據。

問題是我知道沒有辦法告訴表新數據已經到達所以刷新表。 獲取數據並將其添加到 ArrayList 的 Add 方法位於 ASelectedData 類中。 不是創建 tableviewer 的類。

當執行添加方法時,我需要一種方法來告訴表刷新。 問題是表和方法在兩個不同的類中。

希望這更有意義

編輯*

我的主要 GUI 與 TableViewer

public AplotBaseDialog(Shell shell, TCSession theSession) Constructor

//////////////////////////////////////////////////////////////////////////
//                         createTableViewer()                          //
//////////////////////////////////////////////////////////////////////////
private TableViewer createTableViewer(Composite parent) {
   viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
   createColumns(parent, viewer);
   Table table = viewer.getTable();
   table.setHeaderVisible(true);
   table.setLinesVisible(true);

   viewer.setContentProvider(new ArrayContentProvider());
   viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());

   // Layout the viewer
   GridData gridData = new GridData();
   gridData.verticalAlignment = GridData.FILL;
   gridData.horizontalSpan = 2;
   gridData.grabExcessHorizontalSpace = true;
   gridData.grabExcessVerticalSpace = true;
   gridData.horizontalAlignment = GridData.FILL;
   viewer.getControl().setLayoutData(gridData);
   return viewer;
 }

//////////////////////////////////////////////////////////////////////////
//                            updateTableViewer()                       //
//////////////////////////////////////////////////////////////////////////
public void updateTableViewer() {
   viewer.refresh();
}  

添加到其他類的代碼

  AplotBaseDialog abd = new AplotBaseDialog(null, null);

  public void add(TCComponentItemRevision tcRevision, TCComponentDataset selectedDataset) {
   AplotDatasetData pp = new AplotDatasetData(tcRevision, selectedDataset);
   if (!dataArrayList.contains(pp)) {
      dataArrayList.add(pp);

   }
   abd.updateTableViewer();
  }// end add()

雖然您的問題尚未完成,但我會嘗試猜測您的問題:您在Dialog有一個TableViewer ,您可以從主 GUI 編輯ModelProvider 現在您想知道如何更新表格,當您向模型添加內容時,是否正確?

如果是這樣,您可以在對話框中提供一個方法來更新對話框中的TableViewer 像這樣的東西:

public void updateTableViewer()
{
    if(viewer != null)
        viewer.refresh();
}

當您向ModelProvider添加內容時,您可以從主 gui 調用此方法。

如果這不是您的問題,請更新您的原始帖子。

在創建控件中添加這堆代碼可能會解決您的問題:

ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
    @Override
    public void resourceChanged(IResourceChangeEvent event) {
        treeViewer.refresh();
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM