2011-06-07 48 views
4

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

有没有人有一个想法如何装饰树中的项目?我正在试验ControlDecoration班,但没有成功。

由于提前,

马辛

PS。我仅限于Eclipse 3.4

回答

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.