如何在 SWT TableViewer 中装饰列图像和文本?

How can I decorate column images and text in an SWT TableViewer?

我有一个用 JFace TableViewer 包装的 SWT table。

我的要求是:

  1. 使用 workbench 装饰器管理器中定义的装饰器装饰列图像
  2. 用不同的颜色装饰栏的文本

我通过扩展 DecoratingLabelProvider 和实施 ITableLabelProvider 获得了第一名。我将我原来的 TableLabelProvider 和 workbench 装饰器管理器传递给了它,我得到了带有装饰器的图标。

然后我开始研究#2。我在这里问了这个问题,并被告知 IStyleLabelProvider(我试图用于彩色文本的内容)与 ITableLabelProvider 不兼容。所以我转而使用实现 IStyledLabelProvider.

ColumnLabelProvider

但是,现在我卡住了。这两个要求似乎是相互排斥的。我不能同时扩展 ColumnLabelProviderDecoratingLabelProvider。当我试图像这样简单地将 workbench 装饰器管理器传递给 ColumnLabelProvider 时,但它根本没有装饰图像。我是不是传错了,还是只能在 DecoratingLabelProvider 中使用?我还能尝试什么?

    public Image getColumnImage(final Object element, final int columnIndex) {
    if (columnIndex == MY_COLUMN_INDEX) {
            final MyObject myObj = (MyObject) element;
            final Image image = myObj .getImage();
            Image newImage = null;
            if(this.decorator != null) {
                newImage = this.decorator.decorateImage(image, myObj );
            }
            return newImage == null ? image : newImage;
    }
    return null;
}

您可以使用 DecoratingStyledCellLabelProvider,它将 IStyledLabelProviderILabelDecorator 作为参数:

new DecoratingStyledCellLabelProvider(styledLabelProvider,
                    PlatformUI.getWorkbench().getDecoratorManager()
                            .getLabelDecorator(), null);