Как да задам цвета на декоратор на Eclipse/RCP?

Добавих декоратор в приложение Eclipse/RCP към моите елементи за дървовиден преглед чрез plugin.xml:

<extension point="org.eclipse.ui.decorators">
      <decorator
            adaptable="true"
            class="sernet.verinice.samt.rcp.TopicDecorator"
            id="sernet.verinice.samt.rcp.TopicDecorator"
            label="ISA Topic decorator"
            lightweight="true"
            location="BOTTOM_LEFT"
            state="true">
         <enablement>
            <objectClass name="sernet.verinice.model.samt.SamtTopic"/>        
         </enablement>
      </decorator>

In the decorator class i set the decoration suffix which works fine:

public class TopicDecorator extends LabelProvider implements ILightweightLabelDecorator, {
  ControlMaturityService maturityService = new ControlMaturityService();    
  @Override
  public void decorate(Object element, IDecoration decoration) {
     decoration.addSuffix( new StringBuilder().append(" [")
       .append(maturityService.getWeightedMaturity((IControl)element))
       .append("]").toString() );   
     decoration.setForegroundColor(new Color(Display.getCurrent(), 150,90,90));     
   }

Както можете да видите, аз също се опитах да задам цвета на преден план на suffic, което няма ефект. Суфиксът има същия цвят като етикета в дървото: черен.

Как мога да задам цвета на суфикса за декорация?


person uı6ʎɹnɯ ꞁəıuɐp    schedule 04.02.2011    source източник


Отговори (5)


Току-що успях да получа декорация на текст с различен цвят с помощта на обвиващ клас TreeElementDecoratingLabelProvider за org.eclipse.jface.viewers.DecoratingLabelProvider:

public class TreeElementDecoratingLabelProvider extends DecoratingLabelProvider {
   public TreeElementDecoratingLabelProvider(ILabelProvider provider,   ILabelDecorator decorator) {
      super(provider, decorator);
   }

    @Override
    public Color getForeground(Object element) {
      //return your color for element...
      return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
   }
}
person viktorianer    schedule 09.12.2016

Току-що успях да получа декорация на текст с различен цвят с помощта на org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider, който обвива IStyledLabelProvider и ILabelDecorator.

Мисля, че ключът е методът getStyledText на LabelProvider, който позволява персонализиран стил на текста

person R3v3r3nd    schedule 21.12.2011
comment
Просто исках да добавя, че DelegatingStyledCellLabelProvider може да се използва за обвиване на IStyledLabelProvider в случаите, когато човек не иска декоратор, а по-скоро просто доставчик на етикети, който създава директно стилизирани етикети. - person henko; 29.06.2012

Предполагам, че трябва да опитате да промените реда - първо задайте setForegroundColor() и след това добавете суфикс.

Съвет: за да не инициализирате цвят сами, можете да използвате Display.getDefault().getSystemColor(SWT.COLOR_GREEN); След това трябва да се погрижите за изхвърлянето на този цвят - той се освобождава от системата.

person Michal    schedule 09.03.2011
comment
Няма значение дали извиквате setForegroundColor(..) първо или след addSuffix(..). Суфиксът все още има същия цвят като останалата част от текста. - person uı6ʎɹnɯ ꞁəıuɐp; 09.03.2011

Вашият декоратор трябва да внедри org.eclipse.jface.viewers.IColorDecorator, ако трябва да предостави различни цветове

person Prakash G. R.    schedule 23.03.2011
comment
Моят TopicDecorator сега също прилага IColorDecorator. Имплементираните методи decorateBackground и decorateForeground връщат статично един различен цвят, но низът на декоратора все още е черен с бял фон. - person uı6ʎɹnɯ ꞁəıuɐp; 23.03.2011
comment
Уверете се, че предпочитанието за използване на смесени шрифтове и цветове е отметнато (Prefereces-›General-›Apperance) и деактивирайте всички други декоратори (General-›Appearance-›Label decorators) и вижте дали работи - person Prakash G. R.; 23.03.2011

Просто трябва да внедрите org.eclipse.jface.viewers.IColorProvider във вашия LabelProvider

public class MyLabelProvider extends LabelProvider implements IColorProvider {

    public String getText(Object element){
        return String.valueOf(element)
    }

    public Color getForeground(Object element){
        Display display = Display.getDefault();
        return display.getSystemColor(SWT.COLOR_GRAY);
    }

    public Color getBackground(Object element){
        return null;
    }
}

След това можете да създадете DecoratingLabelProvider. Обикновено използвате декоратора на работната маса, защото той открива декоратора, регистриран от точката на разширение org.eclipse.ui.decorators. Вижте Ръководството на разработчиците на Java за Eclipse.

ILabelProvider baseLabelProvider = new MyLabelProvider();
IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager();
ILabelDecorator decorator = decoratorManager.getLabelDecorator();
DecoratingLabelProvider decoratingLabelProvider = new DecoratingLabelProvider(baseLabelProvider, decorator);

и го използвайте както обикновено

TableViewer viewer = ...;
viewer.setLabelProvider(decoratingLabelProvider);

DecoratingLabelProvider автоматично открива дали LabelProvider, което използва, е an

За по-сложни декорации разгледайте WorkbenchLabelProvider.

Често използвам WorkbenchLabelProvider в комбинация с DelegatingStyledCellLabelProvider, защото те идеално се интегрират с работната маса.

Виждам две ползи от този подход:

  1. WorkbenchAdapter е по-лесен за използване от LableProviders
  2. WorkbenchLabelProvider управлява системните ресурси като Colors вместо вас. Така че не забравяйте да изхвърлите WorkbenchLabelProvider.

Ето кодов фрагмент, който често използвам:

ILabelDecorator labelDecorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
DecoratingStyledCellLabelProvider labelProvider = new DecoratingStyledCellLabelProvider(
            new WorkbenchLabelProvider(), labelDecorator, null);
tableViewer.setLabelProvider(labelProvider);
tableViewer.getTable().addDisposeListener((e) -> labelProvider.dispose());
person René Link    schedule 08.02.2020