Как я могу украсить изображения столбцов и текст в SWT TableViewer?

У меня есть таблица SWT, обернутая JFace TableViewer.

Мои требования:

  1. Украсьте изображение столбца с помощью декораторов, как они определены в диспетчере декораторов верстака.
  2. Украсьте текст столбцов разными цветами

Я смог №1, расширив DecoratingLabelProvider и внедрив ITableLabelProvider. Я передал ему свой оригинальный TableLabelProvider и менеджер декораторов верстака, и получил иконки с декораторами.

Затем я начал работать над номером 2. Я задал этот вопрос здесь, и мне сказали, что IStyleLabelProvider (то, что я пытался использовать для цветного текста) несовместимо с ITableLabelProvider. Поэтому я переключился на использование ColumnLabelProvider, реализующего IStyledLabelProvider.

Однако теперь я застрял. Эти 2 требования кажутся взаимоисключающими. Я не могу расширить одновременно 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;
}

person chama    schedule 23.06.2015    source источник


Ответы (1)


Вы можете использовать DecoratingStyledCellLabelProvider, который принимает IStyledLabelProvider и ILabelDecorator в качестве параметров:

new DecoratingStyledCellLabelProvider(styledLabelProvider,
                    PlatformUI.getWorkbench().getDecoratorManager()
                            .getLabelDecorator(), null);
person greg-449    schedule 23.06.2015
comment
Ух ты. Это было слишком просто. Самое смешное, что я использовал этот класс раньше. Я не знаю, как я забыл об этом. Оно работало завораживающе! Благодарю вас! - person chama; 23.06.2015
comment
Существует так много классов провайдеров меток, что трудно запомнить их все. - person greg-449; 23.06.2015