2011-07-27 40 views
0

這是我如何更新我的TableViewer顯示一個列表:查看在Eclipse(RCP)數據矩陣

public void view(MyListClass list) { 
    ViewerSupport.bind(
     this, 
     new WritableList(list, controller.theClass()), 
     BeanProperties.values(controller.theClass(), controller.strings()) 
    ); 
} 

controller是一個封裝我的膠水代碼的類的實例(它是一個不同的類這兩個列表;因爲是controller.theClass())。 strings()是一組屬性名稱。 MyListClass從ArrayList<MyListEntryObject>下降。這工作正常。但是,我想顯示一個數據矩陣。 MyMatrixClassHashMap<Point, MyMatrixEntryObject>。這是我試過的:

private void view(MyMatrixClass matrix) { 
    columns(matrix.columns()); 

    List<WritableList> lists = new ArrayList<WritableList>(matrix.rows()); 

    for (MyEntityClass list : matrix.children()) 
     if (list instanceof MyListClass) 
      lists.add(new WritableList((MyListClass) list, controller.theClass())); 

    WritableList[] alists = lists.toArray(new WritableList[0]); 

    MultiList mlist = new MultiList(alists); 

    ViewerSupport.bind(
      this, 
      mlist, 
      BeanProperties.value(controller.theClass(), "value") 
    ); 
} 

這是行不通的。我得到空參數彈出錯誤。 (每個數據模型類實現MyEntityClass。類名稱已經改變,由於這是我被用來開發一個專用程序。)

長話短說,我怎麼使用ViewerSupportBeanProperties顯示數據的矩陣在TableViewer

回答

1

由於JFace表格查看器是基於行的,因此您必須以基於行的方式提供您的矩陣。您必須創建矩陣行的集合,然後將此列表設置爲查看器的輸入。之後,您可以創建BeanProperties,顯示選定行的列。

+0

這就是爲什麼我使用'MultiList'。我想我可能能夠在每行中推入一個'WritableList'。顯然,這並不奏效。無論如何,'MultiList'是什麼? 有一次,我有一個類MyMatrixRow,但我不知道如何有效地使用它。每行都有任意數量的條目 - >任意數量的屬性。那麼我該如何避免需要編寫大量的'getValue1','getValue2'等? –

+0

不幸的是,我不知道如何用Databinding來解決你的問題。但是,您可以定義自己的內容和標籤提供者,這可以利用您的數據模型 - 但是,在這種情況下,當底層模型元素髮生更改時,您有責任更新顯示。 –