java - ILightweightLabelDecorator 的 'decorate' 方法从未被调用

标签 java swt jface eclipse-plugin eclipse-pde

我正在尝试向 TreeViewer 的特定项目添加叠加图片。我在 stackoverflow 和其他 Google 结果上阅读了 10 多篇关于 ILightweightLabelDecorator 的帖子。

但是我遇到了同样的问题 this guy :ILightweightLabelDecoratordecorate 方法永远不会被调用。

这是我所做的:

...
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/

相关文章:

java - Android 中未找到 WheelView

java - SWT Eclipse : Add a menu option to the left of Quick access search box

maven - 从针对不同操作系统的 2 个配置文件生成 2 个 jar

java - 获取psx游戏的游戏ID

java - 使用 webview 显示进度条

java - Maven - 在子项目/父项目和子项目之间共享类

java - 如何更改列表中特定项目的前景色?

java - Eclipse 中的 JFace 和断言 ClassNotFoundException

java - 禁用 JFace TextCellEditor 字段

java - 如何将 ComboBoxCellEditor 设为只读?