# JTree mit Tooltips per Node



## nero110 (4. Juli 2005)

Nabend zusammen:

 Ich möchte jedem DefaultMutableTreeNode eines JTree einen eigenen ToolTipText verpassen. 

 Ich habe bereits den folgenden Code: 


```
tree_databases.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
 	   
 tree_databases.setCellRenderer(new ServerDefaultTreeCellRenderer());
 	
 ToolTipManager.sharedInstance().registerComponent(tree_databases);
 
 [...]
 
 //In einer Schleife dann werden die einzelnen DefaultMutableTreeNodes dem JTree //hinzugefügt:
 
 		  DefaultMutableTreeNode defaultmutabletreenode_databaseName = new DefaultMutableTreeNode(string_databaseName + " (" + int_packages + ")");
 		  
 		  rootnode_databases.add(defaultmutabletreenode_databaseName);
 
 [...]
 
 //Die Klasse ServerDefaultTreeCellRenderer, die auch die ToolTips angeben soll, ist wie //folgt deklariert: 
 
 public class ServerDefaultTreeCellRenderer extends DefaultTreeCellRenderer {
 		public ServerDefaultTreeCellRenderer() {
 		  super();
 		}
 
 		public Component getTreeCellRendererComponent(
 						    JTree tree,
 						    Object value,
 						    boolean sel,
 						    boolean expanded,
 						    boolean leaf,
 						    int row,
 						    boolean hasFocus) {
 
 			super.getTreeCellRendererComponent(
 						    tree, value, sel,
 						    expanded, leaf, row,
 						    hasFocus);
 
 			    setToolTipText("aber wie fuer einen einzigen node?");
 
 
 			return this;
 		}
 }
```
 
 Im Moment wird für jeden DefaultMutableTreeNode derselbe ToolTipText, nämlich "aber wie fuer einen einzigen node?", angezeigt. Wie muss ich jetzt weiter vorgehen, damit ich die ToolTipTexts individualisieren kann, d.h., wenn möglich in der Schleife den individuellen ToolTipText dem DefaultMutableTreeNode zuweise?

 Vielen Dank, 

 Christian


----------



## javaprogger1987 (7. Juli 2005)

Jo also ich würd das so realisieren:
1. Du machst dir einen neuen Typ Node (z.b. TooltipNode)
Hier mal der Grundcode (mal einfach dahingeklatscht )

```
//Import kriegst du hin oder ;)
 
public class TooltipNode extends DefaultMutableTreeNode
{
private String tooltip = null;
 
public TooltipNode(String tooltip, Object userObject /*Für DMTN-Konstruktor*/)
{
	this.tooltip = tooltip;
	super(userObject);
}
 
public void setTooltip (String t)
{
	tooltip = t;
}
 
public String getTooltip ()
{
	return tooltip;
}
}
```
 
Anstatt den DefaultMutableTreeNodes erzeugst du Instanzen von dieser Klasse.
In der getTreeCellRendererComponent(...) Methode deines Models benutzt du dann folgendes:


```
{
.
.
.
TooltipNode actual = (TooltipNode) value;
setsetToolTipText(value.getTooltip());
 
return this;
}
```
Hoffe das geht so..


----------



## nero110 (8. Juli 2005)

Hallo: 

 Ein Casting ist an dieser Stelle nicht durchführbar. 

  TooltipNode actual = (TooltipNode) value;
  setsetToolTipText(value.getTooltip());

 Chris


----------



## javaprogger1987 (8. Juli 2005)

Warum nicht? Ein Stück Beispiel Code aus einer meiner Anwendungen (DirectoryTreeRenderer.java):


```
public Component getTreeCellRendererComponent ( JTree tree, Object value,
												 boolean selected,
												 boolean expanded,
												 boolean leaf, int row,
												 boolean hasFocus ) {
 
 
	File file = null;
	if (value instanceof FileTreeNode) //Sollte immer erfuellt sein
	 file = ((FileTreeNode) value).getFile();
.
.
.
```
 
Die Nodes in meinem Tree sind FileTreeNodes (abgeleitet von DMTN)..
Funktioniert wunderbar...

//edit Ich hab grad was probiert, kann es sein, dass dein JTree editable ist?
        Also tree.setEditable(true); gesetzt wurde? Weil das hat bei mir auch grad
        nen Fehler gemacht..


----------



## nero110 (8. Juli 2005)

JavaProgger:

 Ich habe einen Fehler bei mir entdeckt, bei dir stimmte alles. 

 Vielen Dank für die kompetente Hilfe.

 Chris


----------

