Freitag, 25. November 2011

Eclipse RCP - Hintergrundfarbe und Image eines Labels im TreeViewer

Dieser Artikel beschreibt wie die Hintergrundfarbe eines Labels in einem TreeViewer geändert werden kann.

Das Aussehen eines Knotens in einem TreeViewer wird mit einem LabelProvider gesteuert. Der LabelProvider wird mit der Methode setLabelProvider der Klasse TreeViewer gesetzt.


// deklaration des TreeViewers in einer View Klasse 
public TreeViewer viewer;

...
// createPartControl Methode der View Klasse 
public void createPartControl(Composite parent) { 

...

  viewer.setLabelProvider(new ViewLabelProvider());

...
}

Die Aufgaben des LabelProviders werden von den geerbten Klassen bzw. den implementierten Interfaces bestimmt. Die Klasse LabelProvider bietet die Methoden getText und getImage, mit denen der Text und das Bild bestimmt werden können. Der Übergabeparameter obj vom Typ Object ist das TreeElement, dass einen Knoten im Tree repräsentiert.

In der hier gezeigten Implementierung liefert der Parameter obj den Text der im Label angezeigt wird, bzw. das Image das zum Label angezeigt wird. Würde man in der Methode getImage immer das gleiche Bild zurückgeben, dann würde der TreeViewer das gleiche Bild für alle Knoten anzeigen.

import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;

class ViewLabelProvider extends LabelProvider implements IColorProvider {

 @Override
 public String getText(Object obj) {
     return obj.toString();
 }
 
 @Override
 public Image getImage(Object obj) {
     Image img = ((TreeObject)obj).getIcon();
     return img; 
 }

 @Override
 public Color getForeground(Object element) {
     return new Color(PlatformUI.getWorkbench().getDisplay(),
                      new RGB(255,255,255));
 }

  @Override
  public Color getBackground(Object element) {
    return new Color(PlatformUI.getWorkbench().getDisplay(), 
                     new RGB(100,100,100));
  }
}

Die Methoden getForeground und getBackground bestimmen die Schriftfarbe und die Hintergrundfarbe.

Es sollte beachtet werden, dass Bilder und Farben in einer Eclipse RCP Applikation verwaltet werden sollten. Das bedeutet, dass einmal erstellte Farben und Bilder wieder freigegeben werden sollten. Mehr dazu im Bilder verwalten Artikel und im Artikel zur Farbverwaltung