我正在尝试向 TreeViewer
的特定项目添加叠加图片。我在 stackoverflow 和其他 Google 结果上阅读了 10 多篇关于 ILightweightLabelDecorator
的帖子。
但是我遇到了同样的问题 this guy :ILightweightLabelDecorator
的 decorate
方法永远不会被调用。
这是我所做的:
...
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);
}
}
...
完成所有这些操作后,它仍然无法正常工作,所以我什至尝试了 plugin.xml 中的声明方式,但 decorate
方法仍然从未被调用.
<decorator
lightweight="true"
location="TOP_RIGHT"
label="ViewLabelProvider Decorator"
class="com.myplugin.MyViewLabelProvider"
id="com.myplugin.viewlabelprovider.decorator"
state="true">
<enablement>
<objectClass name="com.myplugin.model.MyObject"/>
</enablement>
</decorator>
我是不是错过了什么?有人给一些提示吗?
最佳答案
您需要为标签提供程序使用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);
注意:您需要处理以此方式创建的所有图像。
关于java - ILightweightLabelDecorator 的 'decorate' 方法从未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196127/