Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SWT TableViewer中装饰列图像和文本?_Java_Swt_Jface_Tableviewer - Fatal编程技术网

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

Java 如何在SWT TableViewer中装饰列图像和文本?,java,swt,jface,tableviewer,Java,Swt,Jface,Tableviewer,我有一个SWT表,它用JFaceTableViewer包装 我的要求是: 按照工作台装饰器管理器中的定义,使用装饰器装饰列图像 用不同的颜色装饰列的文本 通过扩展DecoratingLabelProvider并实现ITableLabelProvider,我能够#1。我把我原来的TableLabelProvider和工作台装饰器管理器传递给它,我得到了装饰器图标 然后我开始研究#2。我在这里问了这个问题,并被告知IStyleLabelProvider(我试图用于彩色文本的内容)与ITableLab

我有一个SWT表,它用JFace
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);
    

    哇!那太简单了。有趣的是我以前用过这门课。我不知道我是怎么忘记的。它就像一个符咒!非常感谢。标签提供程序类太多,很难全部记住。