有两种方法可以做到这一点.如果您的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)