我正在尝试将叠加图片添加到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
我错过了什么吗?有人给出一些提示吗?
答案 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