TreeViewer中的项目装饰

Mar*_*cin 4 java eclipse treeview swt jface

我有以下问题:我正在Eclipse中编写一个编辑器,其中一个选项卡包含TreeViewer来显示树中的项目.每个项目都有一个名称和值,可以编辑.我需要向用户表明该值不正确的问题(例如超出给定范围).我的想法是用警告或错误图标装饰不正确的单元格,编辑完成后也会显示.

有人知道如何装饰树中的物品吗?我正在尝试使用ControlDecoration类,但没有成功.

提前致谢,

马尔钦

PS.我只限于Eclipse 3.4

Kel*_*dil 8

有两种方法可以做到这一点.如果您的TreeViewer显示的对象是EObject的实例(由EMF生成.如果您不理解这部分,请跳到下一段:)),您可以更改这些EObject的"XyzItemProvider",以便他们的"getImage"方法返回装饰图像而不是"普通"图像......这就是EMF对象,没有其他东西需要改变.

如果您正在显示"经典"Java对象,则必须更改TreeViewer的LabelProvider才能装饰图像.这是通过TreeViewer#setLabelProvider()方法完成的.

你需要的是"如何装饰图像",这是通过以下代码完成的:

public class MyLabelProvider extends DecoratingLabelProvider {
    public Image getImage(Object element) {
        Image image = super.getImage(element);

        List<Object> images = new ArrayList<Object>(2);
        images.add(image);
        images.add(<Image of the decorator>);
        labelImage = new ComposedImage(images); // This will put the second of the "images" list (the decorator) above the first (the element's image)

        return decoratedImage;
    }
    [...]
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要为您的树查看器提供此标签提供程序:

TreeViewer treeViewer = new TreeViewer(...);
treeViewer.setLabelProvider(new MyLabelProvider(new LabelProvider()); // new LabelProvider()... or your previous label provider if you have one.
Run Code Online (Sandbox Code Playgroud)