SWT - 表格行 - 更改字体颜色

时间:2012-09-26 20:52:08

标签: swt tableviewer

是否可以根据其中一列中的值更改行的字体颜色?

我的表中有一列显示状态。列的值将为“失败”或“成功”。

如果是成功,我希望行字体为绿色。如果状态等于Failed,我希望行字体为红色。

这是可能的,如果是这样我会把逻辑放在哪里。

修改

这是我的Table Viewer代码,我不打算显示所有列,只是一对

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

1 个答案:

答案 0 :(得分:2)

检查元素状态并返回您要使用的颜色

Viewer implementation        
    ColumnLabelProvider
        public Color getForeground(Object element)

表格使用

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

当您对每列使用ColumnLabelProvider时,需要覆盖每列的getForeground(Object元素)。另一种方法是,不要为每列添加ColumnLabelProvider

LabelProvider设置为TableViewer级别。

TableViewer.setLabelProvider(ColumnLabelProvider labelProvider)。由于您没有在列级别设置标签提供程序,因此tableviewer会从TableViewer级别设置的标签提供程序获取每个单元格的显示文本,图像,字体,背景,前景等。