# Verschiedene Farben in einem Treeview



## gbo (5. Mai 2009)

Hallo zusammen,

ich habe eine RCP View mit einem TreeViewer implementiert. Der Treeview stellt verschiedene Key-Value jeweils als ein Item Paare dar. Nun möchte ich gern Key und Value farblich voneinander unterscheidbar machen. Im Prinzip genau so wie in der Outline von Eclipse, in der Name und Rückgabetyp von einer Methode unterschiedlich eingefärbt sind.







Weiß jemand wie ich das anstelle?

Grüße,
gbo


----------



## Vayu (5. Mai 2009)

müsste eigentlich mit einem

ITableColorProvider funktionieren. Einfach deinen LabelProvider um das Interface erweitern, dann solltest du innerhalb einer Zeile auch noch zwischen Spalten unterscheiden können.


----------



## gbo (6. Mai 2009)

Danke, das System habe ich jetzt verstanden. Mein Problem ist noch, dass ich meinen TreeViewer nicht überzeugt bekomme, mehrere Spalten anzuzeigen. Zudem wird der gesetzte LableProvider nicht verwendet.

Hier der LabelProvider:


```
public class TreeQuickviewLabelProvider extends LabelProvider implements ITableLabelProvider, ITableColorProvider {

  public Color getBackground(final Object element, final int columnIndex) {
    return null;
  }

  public Color getForeground(final Object element, final int columnIndex) {
    System.out.println("getForeground called");
    Color result = null;
    switch (columnIndex) {
      case 0 :
        result = Display.getCurrent().getSystemColor(SWT.COLOR_BLUE);
        break;
      case 1 :
        result = Display.getCurrent().getSystemColor(SWT.COLOR_GREEN);
        break;
      default :
        break;
    }
    return result;
  }

  public Image getColumnImage(final Object element, final int columnIndex) {
    System.out.println("getColumnImage called");
    Image result = null;
    if (element instanceof BaseTreeObject) {
      final BaseTreeObject bto = (BaseTreeObject) element;
      switch (columnIndex) {
        case 0 :
          if (bto.getImage() != null) {
            result = bto.getImage().createImage();
          }
          break;
        case 1 :
          break;
        default :
          break;
      }
    }
    return result;
  }

  public String getColumnText(final Object element, final int columnIndex) {
    System.out.println("getColumnText called");
    String result = null;
    if (element instanceof BaseTreeObject) {
      final BaseTreeObject bto = (BaseTreeObject) element;
      switch (columnIndex) {
        case 0 :
          result = bto.getKey();
          break;
        case 1 :
          result = bto.getValue();
          break;
        default :
          break;
      }
    }
    return result;
  }

}
```


und die Stelle an der ich den TreeViewer initialisiere:


```
TreeViewer viewer = super.getTreeViewer();
    drillDownAdapter = new DrillDownAdapter(viewer);
    viewer.setLabelProvider(new TreeQuickviewLabelProvider());
    viewer.setContentProvider(new TreeQuickviewContentProvider(root));
    viewer.setInput(root);
    viewer.expandToLevel(expandToLevel);
    viewer.getTree().setBackground(Display.getCurrent().getSystemColor(colorBackground));
```


----------



## Vayu (6. Mai 2009)

du musst auf deinem TreeViewer noch die ColumnProperties setzen, so dass er auch weiss, dass du es mehrere Spalten gibt 


```
setColumnProperties
```


----------



## gbo (6. Mai 2009)

Das setzen der ColumnProperties hat leider nix gebracht.


```
viewer.setColumnProperties(new String[] {"col1", "col2"});
```

stattdessen habe ich mal den TreeViewer abgeleitet und die Methode doGetColumnCount() überschrieben:


```
public class BaseTreeViewer extends TreeViewer {

  public BaseTreeViewer(final Composite parent) {
    super(parent);
  }

  public BaseTreeViewer(final Composite parent, final int i) {
    super(parent, i);
  }

  private static final int COLUMNCOUNT = 2;

  @Override
  protected int doGetColumnCount() {
    return COLUMNCOUNT;
  }
}
```

Nun springt der LabelProvider an und die erste Spalte wird korrekt dargestellt, aber die zweite nicht (wird garnicht angezeigt) :/


----------



## gbo (6. Mai 2009)

2. Spalte wirft eine Exception:


```
java.lang.NullPointerException
	at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:932)
```

columnViewer scheint null zu sein


```
columnViewer.refresh(cellToUpdate);
```


----------

