2012-09-26 163 views
1

是否可以根據某一列中的值更改行的字體顏色?SWT - 錶行 - 更改字體顏色

我的表格有一列顯示狀態。該列的值將失敗或成功。

如果是成功,我希望該行的字體爲綠色。如果狀態等於失敗,我希望該行的字體爲紅色。

這是可能的,如果是的話我會把邏輯放在哪裏。

編輯

這裏是我的表查看代碼,我不打算來顯示所有的列,只是一對夫婦

private void createColumns() { 

    String[] titles = { "ItemId", "RevId", "PRL", "Dataset Name", "Printer/Profile" , "Success/Fail" }; 
    int[] bounds = { 100, 75, 75, 150, 200, 100 }; 

    TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0); 
    col.setLabelProvider(new ColumnLabelProvider() { 
    public String getText(Object element) { 
     if(element instanceof AplotResultsDataModel.ResultsData) { 
      return ((AplotResultsDataModel.ResultsData)element).getItemId(); 
     }   
     return super.getText(element); 
    } 
    }); 

    col = createTableViewerColumn(titles[1], bounds[1], 1); 
    col.setLabelProvider(new ColumnLabelProvider() { 
    public String getText(Object element) { 
     if(element instanceof AplotResultsDataModel.ResultsData) { 
      return ((AplotResultsDataModel.ResultsData)element).getRevId(); 
     }   
     return super.getText(element); 
    } 
    }); --ETC 
+0

簡短的回答 - 這是可能的。詳細的答案取決於您使用SWT表還是JFace表查看器。 – Eugene

回答

2

檢查元素狀態,並返回要使用的顏色

Viewer implementation   
    ColumnLabelProvider 
     public Color getForeground(Object element) 

對於表使用

TableItem 
     setForeground(Color color) 
     setForeground(int index, Color color) 

對於每列使用ColumnLabelProvider,您需要覆蓋每列的getForeground(Object element)。另一種方式,不要爲每列添加ColumnLabelProvider

設置LabelProviderTableViewer級別。

TableViewer.setLabelProvider(ColumnLabelProvider labelProvider)。由於您沒有在列級別設置標籤提供程序,因此tableviewer從標籤提供程序設置的TableViewer級別獲取每個單元格的顯示文本,圖像,字體,背景,前景等。

+0

sambi - 我是否必須在查看器實現和TableItem中更改它,或者您是在說一個還是另一個?我也在使用表格查看器。我需要檢查並更改每列的顏色嗎?我將在上面粘貼我的列代碼。如果您想告訴我在何處以及如何實施邏輯 – jkteater

+0

更新的前一個答案 –

+0

您會看到我正在使用ColumnLabelProvider。我使用的唯一原因是因爲這是我設置我的表格查看器時遇到的第一個例子。如果您認爲有更好的方法來設置專欄,請告訴我。我對此很新,仍然試圖儘可能多地學習它。你能舉一個例子說明如何實現上面提到的任何一種方法嗎? – jkteater