我有以下问题: 我正在Eclipse中编写一个编辑器,其中一个选项卡包含 TreeViewer 以显示树中的项目。每个项目都有一个名称和值,可以编辑。 我需要向用户指出该值不正确的问题(例如超过给定范围)。我的想法是用一个警告或错误图标装饰不正确的单元格,编辑完成后也会显示该图标。
有人知道如何装饰树中的项目吗?我正在尝试使用 ControlDecoration 类,但没有成功。
提前致谢,
的Marcin
PS。我仅限于Eclipse 3.4
答案 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.