如何在 SWT TableViewer 中装饰列图像和文本?
How can I decorate column images and text in an SWT TableViewer?
我有一个用 JFace TableViewer
包装的 SWT table。
我的要求是:
- 使用 workbench 装饰器管理器中定义的装饰器装饰列图像
- 用不同的颜色装饰栏的文本
我通过扩展 DecoratingLabelProvider
和实施 ITableLabelProvider
获得了第一名。我将我原来的 TableLabelProvider
和 workbench 装饰器管理器传递给了它,我得到了带有装饰器的图标。
然后我开始研究#2。我在这里问了这个问题,并被告知 IStyleLabelProvider
(我试图用于彩色文本的内容)与 ITableLabelProvider
不兼容。所以我转而使用实现 IStyledLabelProvider
.
的 ColumnLabelProvider
但是,现在我卡住了。这两个要求似乎是相互排斥的。我不能同时扩展 ColumnLabelProvider
和 DecoratingLabelProvider
。当我试图像这样简单地将 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
,它将 IStyledLabelProvider
和 ILabelDecorator
作为参数:
new DecoratingStyledCellLabelProvider(styledLabelProvider,
PlatformUI.getWorkbench().getDecoratorManager()
.getLabelDecorator(), null);
我有一个用 JFace TableViewer
包装的 SWT table。
我的要求是:
- 使用 workbench 装饰器管理器中定义的装饰器装饰列图像
- 用不同的颜色装饰栏的文本
我通过扩展 DecoratingLabelProvider
和实施 ITableLabelProvider
获得了第一名。我将我原来的 TableLabelProvider
和 workbench 装饰器管理器传递给了它,我得到了带有装饰器的图标。
然后我开始研究#2。我在这里问了这个问题,并被告知 IStyleLabelProvider
(我试图用于彩色文本的内容)与 ITableLabelProvider
不兼容。所以我转而使用实现 IStyledLabelProvider
.
ColumnLabelProvider
但是,现在我卡住了。这两个要求似乎是相互排斥的。我不能同时扩展 ColumnLabelProvider
和 DecoratingLabelProvider
。当我试图像这样简单地将 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
,它将 IStyledLabelProvider
和 ILabelDecorator
作为参数:
new DecoratingStyledCellLabelProvider(styledLabelProvider,
PlatformUI.getWorkbench().getDecoratorManager()
.getLabelDecorator(), null);