# JTree width der Treenodes auf 100%



## Kartoffel (1. Mrz 2011)

Hallo zusammen,

ich hab einen JTree und möchte mit meinem Renderer alle Knoten so darstellen, dass dieser immer auf 100% Breite skaliert sind. Also der Knoten soll quasi immer so breit sein, damit er das Panel vom JTree bis ganz nach rechts hin auffüllt. Da mein JTree auf eine ScrollPane ist, kann ich ja nicht direkt die width() vom JTree nehmen, da dieser ja scrollbar und somit größer als die Anzeige sein kann. Also hole ich mir die Breite vom parent-Component. Wenn ich jetzt in meinem Renderer mit setPrefferedSize(...) die größe des Panels setze, welches den Knoten darstellen soll, passt das auch. Allerdings werden alle Sub-Panels nicht skaliert.

Beispielcode aus dem Renderer:


```
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel,
      boolean expanded, boolean leaf, int row, boolean hasFocus)
  {     
      //... blabla code

      pnlRoot.setBorder(new EmptyBorder(1, 1, 1, 1)); //haupt panel
      pnlRoot.setOpaque(false);
      if(tree.getParent() != null){ //größe anpassen, damit auf 100%
        pnlRoot.setPreferredSize(new Dimension(tree.getParent().getWidth(), 50));
      }

      pnlRoot.add(pnlInfo, BorderLayout.CENTER);    //panel mit weitern labels
      pnlRoot.add(lblIcon, BorderLayout.WEST);    //label mit icon

     return pnlRoot;
}
```

Also das pnlRoot wird korrekt skaliert, aber alle Components auf diesem Panel nicht.
Hat wer eine Idee was da nicht stimmt? Oder passt mein Ansatz schon nicht?

Gruß
Toffel


----------



## André Uhres (1. Mrz 2011)

Kartoffel hat gesagt.:


> das pnlRoot wird korrekt skaliert, aber alle Components auf diesem Panel nicht.
> Hat wer eine Idee was da nicht stimmt?



Hat pnlRoot einen Layoutmanager, der skaliert?

Gruß,
André


----------



## Kartoffel (2. Mrz 2011)

Ja, ein BorderLayout.


----------



## Kartoffel (2. Mrz 2011)

Hab noch eine weitere Frage: Wenn via CellRenderer meinen Knoten Rendere, und dann einen JButton auf das Panel des Knotens setze, dann bekommt dieser anscheinend keine ActionEvents geliefert. Also wenn ich da nen ActionListener dran hänge, passiert nichts. Ich denke mal, dass der JTree die ganzen events anfängt. Gibt es da eine Möglichkeit die events durchzureichen?


----------



## Michael... (2. Mrz 2011)

Ein Renderer zeichnet nur eine Abbildung.
Was Du suchst ist ein TreeCellEditor.


----------



## André Uhres (3. Mrz 2011)

Oder ein MouseListener am JTree? Über die Koordinaten kann man ja abfragen, wo geklickt wurde ...


----------



## André Uhres (3. Mrz 2011)

Kartoffel hat gesagt.:


> ich hab einen JTree und möchte mit meinem Renderer alle Knoten so darstellen, dass dieser immer auf 100% Breite skaliert sind.



Hallo Toffel,

vielleicht kann dir dieser Thread helfen: Resizing nodes.

Gruß,
André


----------

