TreeViewer中的项目装饰

时间:2011-06-07 09:38:31

标签: java eclipse treeview swt jface

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

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

提前致谢,

的Marcin

PS。我仅限于Eclipse 3.4

1 个答案:

答案 0 :(得分: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;
    }
    [...]
}

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

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