JFace TableViewer - 为表格中的所有单元格设置字体颜色

jkt*_*ter 1 java fonts swt jface

我问了一个非常相似的问题,但我最终使用了图像而不是改变颜色.

我希望单元格中的所有文本都是深灰色的.我知道你必须分配每一列.但我不知道怎么做.

这是我的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();
    }
}); 
Run Code Online (Sandbox Code Playgroud)

如何更改上面的代码以将字体颜色设置为深灰色?

编辑

如果我使用的是开关,它怎么知道我有多少列?另外我如何设置列名?以下是我现在的设置

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;
             }
         }
     }
 });
Run Code Online (Sandbox Code Playgroud)

Baz*_*Baz 6

我会使用的方法update(ViewerCell cell)ColumnLabelProvider替代getText().然后你可以打电话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 ...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

col.getColumn().setWidth(150);
col.getColumn().setText("ItemId");
col.setLabelProvider(new ColorColumnLabelProvider());
Run Code Online (Sandbox Code Playgroud)

由于我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();
    }

}
Run Code Online (Sandbox Code Playgroud)