我通过 plugin.xml 将Eclipse / RCP应用程序中的装饰器添加到我的树查看器项目中:
<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>
在装饰器类中,我设置了装饰后缀,工作正常:
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的前景色。后缀与树中的标签颜色相同:黑色。
如何设置装饰后缀的颜色?
答案 0 :(得分:3)
我刚刚使用包含IStyledLabelProvider
和ILabelDecorator
的{{3}}获得了不同颜色的文字装饰。
我认为关键是getStyledText
的{{1}}方法,它允许自定义文本样式
答案 1 :(得分:1)
我猜您应该尝试更改顺序 - 首先设置setForegroundColor()然后添加后缀。
提示:要不自己初始化任何颜色,可以使用Display.getDefault()。getSystemColor(SWT.COLOR_GREEN);然后你需要关心处理这种颜色 - 它被系统释放。
答案 2 :(得分:1)
如果需要提供各种颜色,装饰者需要实现org.eclipse.jface.viewers.IColorDecorator
答案 3 :(得分:1)
我使用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);
}
}
答案 4 :(得分:1)
您只需要在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
注册的装饰器。参见The Java Developer's Guide to 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
是否为
有关更复杂的装饰,请查看WorkbenchLabelProvider
。
我经常将WorkbenchLabelProvider
与DelegatingStyledCellLabelProvider
结合使用,因为它们与工作台完美集成。
我看到这种方法有两个好处:
WorkbenchAdapter
比LableProvider
更容易使用WorkbenchLabelProvider
为您管理Color
之类的系统资源。
因此,不要忘记处理WorkbenchLabelProvider
。这是我经常使用的代码段:
ILabelDecorator labelDecorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
DecoratingStyledCellLabelProvider labelProvider = new DecoratingStyledCellLabelProvider(
new WorkbenchLabelProvider(), labelDecorator, null);
tableViewer.setLabelProvider(labelProvider);
tableViewer.getTable().addDisposeListener((e) -> labelProvider.dispose());