# JTree Farbe



## PollerJava (3. Dez 2007)

Hallo,

ich habe einen JTree und möchte nur die Hintergrundfarbe der einzelnen Knoten steuern können (nicht wenn diese angewählt werden sondern willkürlich) also so eine Art setBackground,

ist das irgendwie möglich, bzw. wie?

lg


----------



## Niki (3. Dez 2007)

Naja, wie bei der Table ein Renderer


----------



## PollerJava (3. Dez 2007)

Ja, das schon aber ich weiß nicht, wie ich die Methode unten überschreiben muss bzw. wo ich das Object value hincasten muss, damit ich die Hintergrundfarbe setzen kann.



```
@Override public Component getTreeCellRendererComponent(JTree tree2, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) 
        {
        super.getTreeCellRendererComponent(tree2, value, sel, expanded, leaf, row, hasFocus);
        return this;
        }
```


----------



## Niki (3. Dez 2007)

Es ist schon lange her das ich swing programmieren musste, ich glaub aber das du einen MutableTreeNode oder sowas als Object bekommst. gib dir die klasse doch einfach aus: value.getClass().getName()...
dann einfach setBackground(Color.RED) aufrufen


----------



## PollerJava (3. Dez 2007)

Ja genau, ein ((DefaultMutableTreeNode)value). bekommt man aber DefaultMutableTreeNode hat kein setBackground()
gibts da eine andere Methode zum Setzen der Hintergrundfarbe?

lg


----------



## Niki (3. Dez 2007)

Du musst direkt in der Methode getTreeCellRendererComponent setBackground aufrufen:

```
public Component getTreeCellRendererComponent(JTree tree2, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
        {
        super.getTreeCellRendererComponent(tree2, value, sel, expanded, leaf, row, hasFocus);

        setBackground(row % 2 == 0 ? Color.RED : Color.GREEN);

        return this;
        }
```


----------



## PollerJava (3. Dez 2007)

Nö, das mag nicht so richtig, keine Ahnug was es da bei mir hat,


----------



## André Uhres (3. Dez 2007)

Wenn der Renderer von DefaultTreeCellRenderer abgeleitet ist, dann muss es gehen. 
DefaultTreeCellRenderer ist nämlich ganz einfach ein JLabel. 
Du brauchst dann also nur setBackground(Color.RED) aufzurufen ohne was davor, bzw. this.setBackground(Color.RED)


----------



## Niki (3. Dez 2007)

Registrierst du den Renderer auch beim Tree? Wenn nicht wird die Methode ja nie aufgerufen!


----------



## PollerJava (3. Dez 2007)

schon schon, ich registriere den Renderer so:


```
private DefaultTreeCellRenderer rendererVerbindungen;
rendererVerbindungen = new MyreeRendererVerbindungen();
verbindungstree.setCellRenderer(rendererVerbindungen);
```

die Methode wird auch definitiv aufgerufen (System.out.println()),

kann es sein, dass ich noch eine Methode von DefaultTreeCellRenderer überschreiben muss?

das mit einem Icon funktioniert interessanterweise:





```
setIcon(new ImageIcon(cl.getResource("pics/icon/pegel.jpg")));
```

lg


----------



## Niki (3. Dez 2007)

Nein, eigentlich muss es so klappen! Macht er einfach gar nichts oder was für ein Verhalten hat der Baum?


----------



## PollerJava (3. Dez 2007)

Vordergrundfarbe und setIcon geht , nur eben die Hintergrundfarbe nicht


```
setForeground(Color.GREEN);
```


----------



## Niki (3. Dez 2007)

Habs gerade nachstellen können, setz einfach auch noch setOpaque(true); Dann klappts!


----------



## byte (3. Dez 2007)

Edit: zu spät.


----------



## PollerJava (3. Dez 2007)

super, vielen Dank!!!!!


----------

