2015-09-04 140 views
0

我正在尋找一種方法來顯示錶格/網格的第一列中的其他三列,其中一個與組合框,其他與複選框。我一直在嘗試使用TreeViewer進行這項工作,但它不太適合我在尋找的東西。樹合在一起很好。在Combobox列中,我使用了列的EditorSupport並在getCellEditor方法中返回一個ComboboxCellEditor,但只能在列中選擇一個單元格時才能看到列中有組合框。然後,當您單擊單元格時,所選值將返回到默認空白。複選框列的相同情況僅在選中單元格時纔可見。我正在尋找能夠顯示我的樹的組合框,並且複選框列始終可見。我已經看過TableViewer,但是無法在第一列的樹中找到強制的方法。我看過Nebula Grid,但看起來不像它支持組合框。有關如何讓其中一個工作的任何提示,比如我正在尋找的東西,或者我應該看到的其他樹/表格/網格。謝謝。SWT TreeViewer與組合框和複選框

編輯:這是EditingSupport類的代碼。

private class ComboBoxEditingSupport extends EditingSupport 
{ 
    private ComboBoxCellEditor cellEditor; 

    public ComboBoxEditingSupport(ColumnViewer viewer) 
    { 
     super(viewer); 

     cellEditor = 
      new ComboBoxCellEditor(((TreeViewer) viewer).getTree(), 
       new String[] { 
         "Some String", 
         "Some other String" }, SWT.READ_ONLY); 

    } 

    @Override 
    protected CellEditor getCellEditor(Object element) 
    { 
     if (element instanceof MyObject 
     { 
      return cellEditor; 
     } 
     return null; 
    } 

    @Override 
    protected boolean canEdit(Object element) 
    { 
     if (element instanceof MyObject 
     { 
      return true; 
     } 
     return false; 
    } 

    @Override 
    protected Object getValue(Object element) 
    { 
     return 0; 
    } 

    @Override 
    protected void setValue(Object element, Object value) 
    { 
     TreeItem[] ti = treeViewer.getTree().getSelection(); 
     CCombo combo = ((CCombo) cellEditor.getControl()); 
     String str = combo.getItem(combo.getSelectionIndex()); 
     ti[0].setText(1, str); 
    } 
} 
+0

我已經厭倦swt TreeViewer TreeColumnViewers的列。我嘗試了Nebula Grid。這是關閉的,但它不支持在它的外觀列中的組合框。我試過TableViewer,但不支持我需要的樹。 – EdDen

+0

編輯支持與ComboboxCellEditor應該工作,這聽起來像你在'setValue'方法有問題 - 向我們展示你的代碼。 –

回答

1

setValue方法必須更新您的模型數據值(由內容提供商返回的數據)。 element參數setValue是您應更新的特定型號數據對象(MyObject)。

更新值調用之後:

getViewer().update(element, null); 

讓樹更新從模型中顯示。

試圖直接更新TreeItem將無法​​正常工作。

+0

這幫助了很多,並走上了正確的道路。我想後續的問題是我怎樣才能讓組合框的向下箭頭始終顯示。現在它只在細胞被點擊後顯示,一旦細胞失去焦點就會消失。 – EdDen

+0

同樣的方式也適用於複選框列。我如何讓複選框真正顯示出來。我有它的功能,但複選框不顯示。 – EdDen

+0

不幸的是,EditingSupport代碼一次只支持一個單元格,正如你所見。您可能必須使用'OwnerDrawLabelProvider'並自己繪製所有單元格才能做得更好。 –