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.