2012-10-10 76 views
1

我問了一個非常類似的問題,但我最終使用了圖像而不是改變顏色。JFace TableViewer - 爲表格中的所有單元格設置字體顏色

我希望單元格中的所有文本都是深灰色的。我知道你必須分配每一列。但我不知道該怎麼做。

這是我的TableViewer中的一個列。

col = new TableViewerColumn(this , SWT.NONE); 
col.getColumn().setWidth(200); 
col.getColumn().setText("Printer/Profile"); 
col.setLabelProvider(new ColumnLabelProvider() { 
    @Override 
    public String getText(Object element) { 
     AplotResultsDataModel.ResultsData p = (AplotResultsDataModel.ResultsData) element; 
     return p.getPrinterProfile(); 
    } 
}); 

如何更改上述代碼以將字體顏色設置爲深灰色?

編輯

如果我使用的開關,它是如何知道我有多少列呢? 如何設置列名?這是我如何把它設置了現在

TableViewerColumn col = new TableViewerColumn(this , SWT.NONE); 
    col.getColumn().setWidth(150); 
    col.getColumn().setText("ItemId"); 
    col.setLabelProvider(new ColumnLabelProvider() { 
    @Override 
    public void update(ViewerCell cell) 
    { 
     Object element = cell.getElement(); 
     if(element instanceof AplotPDFDataModel.FileNameData) 
     { 
      AplotPDFDataModel.FileNameData p = (AplotPDFDataModel.FileNameData) element; 
      cell.setForeground(ColorConstants.darkGray); 
      switch(cell.getColumnIndex()) 
      { 
       case 0: 
        try { 
        cell.setText(p.getRev().getStringProperty("item_id")); 
        } 
        catch (TCException e) { 
        e.printStackTrace(); 
        } 
        break; 
       case 1: 
        try { 
        cell.setText(p.getRev().getStringProperty("item_revision_id")); 
        } 
        catch (TCException e) { 
        e.printStackTrace(); 
        } 
        break; 
       case 2: 
        cell.setText(p.getPRLValue().toString()); 
        break; 
       case 3: 
        cell.setText(p.getMarkupValue()); 
        break; 
       case 4: 
        cell.setText(p.getFileName()); 
        break; 
      } 
     } 
    } 
}); 
+0

嘛,你知道,你的表有多少列了,不是嗎?你是什​​麼意思:「_如何設置列名_」?也許我的替代解決方案對你來說是更好的選擇,因爲它涉及的代碼更少。 – Baz

+0

我指的是列標題和列寬。我真的很想學習如何使用Switch。例如,第1列標題應該是寬度爲100的itemID,第2列標題應該寬度爲50 – jkteater

+0

此外,如果使用第一個替代方法,則只需爲「ColumnLabelProvider」創建一個新類並使用col .setLabelProvider(new YourColumnLabelProvider())'。這將減少冗餘代碼。 – Baz

回答

5

我會使用的方法ColumnLabelProvider代替getText()update(ViewerCell cell)。然後,你可以調用ViewerCell#setForeground(Color color)

public class ColorColumnLabelProvider extends ColumnLabelProvider { 
    @Override 
    public void update(ViewerCell cell) 
    { 
     Object element = cell.getElement(); 
     if(element instanceof AplotResultsDataModel.ResultsData) 
     { 
      AplotResultsDataModel.ResultsData p = (AplotResultsDataModel.ResultsData) element; 

      cell.setForeground(YOUR_COLOR); 
      switch(cell.getColumnIndex()) 
      { 
       case 0: 
        cell.setText(p.YOUR_FIRST_TEXT); 
        break; 
       case 1: 
        cell.setText(p.YOUR_SECOND_TEXT); 
        break; 
       case ... 
      } 
     } 
    } 
} 

然後使用:

col.getColumn().setWidth(150); 
col.getColumn().setText("ItemId"); 
col.setLabelProvider(new ColorColumnLabelProvider()); 

因爲我switch列索引,您可以使用此ColorColumnLabelProvider您的所有列。

不要忘記在某處放置顏色。

如果您使用ColorConstantsDraw2d,則不需要配置它們。

在你的情況ColorConstants.darkGray會做這項工作。

備選

您還可以定義一個ColumnLabelProvider實現IColorProvider

public class ColorColumnLabelProvider extends ColumnLabelProvider implements IColorProvider { 

    @Override 
    public Color getBackground(Object element) { 
     return null; 
    } 

    @Override 
    public Color getForeground(Object element) { 
     return YOUR_COLOR; 
    } 

    @Override 
    public String getText(Object element) { 
     AplotResultsDataModel.ResultsData p = (AplotResultsDataModel.ResultsData) element; 
     return p.getPrinterProfile(); 
    } 

} 
+0

我遇到ColorConstants.darkGray的問題。它希望我導入java.swing.text.StyleConstants。我不能僅使用Swing SWT。 ColorConstants仍可以使用嗎? – jkteater

+0

@jkteater您必須將Draw2d jar添加到您的項目中才能使用ColorConstants。或者通過軟件管理器安裝Draw2d。但是,您可以使用SWT顏色。但是你必須把它們放置在某個地方。 – Baz

+0

我添加了Draw2d到我需要的插件,它似乎有幫助 - 仍然需要測試 – jkteater

相關問題