永远不会调用ILightweightLabelDecorator的'decorate'方法

时间:2014-06-13 00:46:26

标签: java swt jface eclipse-plugin eclipse-pde

我正在尝试将叠加图片添加到TreeViewer的特定项目中。我已经阅读了有关stackoverflow的10多篇帖子以及有关ILightweightLabelDecorator的其他Google搜索结果。

但是我遇到this guy同样的问题:永远不会调用ILightweightLabelDecorator的{​​{1}}方法。

以下是我所做的:

decorate

完成所有这些操作后,它仍然无法正常工作,所以我甚至尝试了 plugin.xml 中的声明方式,但仍然没有调用... viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new MyViewLabelProvider()); ... //the MyViewLabelProvider class public class MyViewLabelProvider extends LabelProvider implements ILightweightLabelDecorator{ public void decorate(Object element, IDecoration decoration) { if(element instanceof MyObject){ decoration.addOverlay(ImageUtil.getImageDescriptor("icons/decorate.gif"), IDecoration.TOP_RIGHT); } } ... 方法。

decorate

我错过了什么吗?有人给出一些提示吗?

2 个答案:

答案 0 :(得分:1)

您需要为您的标签提供商使用org.eclipse.jface.viewers.DecoratingLabelProvider,如下所示:

viewer.setLabelProvider(new DecoratingLabelProvider(your label provider,
             PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));

通常,您的标签提供者只是扩展LabelProvider,您使用单独的类来实现ILightweightLabelDecorator

更新

如果您只想在标签提供商的图片上添加叠加层,则可以使用org.eclipse.jface.viewers.DecorationOverlayIcon。类似的东西:

DecorationOverlayIcon decoratedImage = new DecorationOverlayIcon(img, overlay, IDecoration.BOTTOM_RIGHT);

注意:您需要处理以这种方式创建的任何图像。

答案 1 :(得分:1)

检查我的这篇文章是否有帮助。它有使用装饰器的逐步程序

http://subhankarc.blogspot.in/2012/05/decorator-in-eclipse-jface-treeviewer.html