Java 如何在SWT TableViewer中装饰列图像和文本?
我有一个SWT表,它用JFaceJava 如何在SWT TableViewer中装饰列图像和文本?,java,swt,jface,tableviewer,Java,Swt,Jface,Tableviewer,我有一个SWT表,它用JFaceTableViewer包装 我的要求是: 按照工作台装饰器管理器中的定义,使用装饰器装饰列图像 用不同的颜色装饰列的文本 通过扩展DecoratingLabelProvider并实现ITableLabelProvider,我能够#1。我把我原来的TableLabelProvider和工作台装饰器管理器传递给它,我得到了装饰器图标 然后我开始研究#2。我在这里问了这个问题,并被告知IStyleLabelProvider(我试图用于彩色文本的内容)与ITableLab
TableViewer
包装
我的要求是:
DecoratingLabelProvider
并实现ITableLabelProvider
,我能够#1。我把我原来的TableLabelProvider
和工作台装饰器管理器传递给它,我得到了装饰器图标
然后我开始研究#2。我在这里问了这个问题,并被告知IStyleLabelProvider
(我试图用于彩色文本的内容)与ITableLabelProvider
不兼容。因此,我转而使用实现IStyleLabelProvider的ColumnLabelProvider
然而,现在我被卡住了。这两个要求似乎是相互排斥的。我无法同时扩展ColumnLabelProvider
和装饰性LabelProvider
。当我尝试像这样简单地将workbench decorator管理器传递给ColumnLabelProvider
时,它根本没有装饰图像。我是不是传递错了,还是这只适用于装饰标签提供者
?我还能试什么
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);
哇!那太简单了。有趣的是我以前用过这门课。我不知道我是怎么忘记的。它就像一个符咒!非常感谢。标签提供程序类太多,很难全部记住。