# JTree expand zu einem Pfad bei Programmstart



## cr3m4 (21. Mai 2008)

Hallo Leute,

also so richtig blick ich bei dem Treepath noch nicht durch.

ich will dass beim Programmstart der Jtree schon bei einem bestimmten Pfad aufgeklappt ist.
Dies erreich ich wohl per:

Code:

jTree1.expandPath(path)

Doch wie ich jetzt den Pfad setze, habe ich noch nicht durchdrungen und die Beispiele die ich bisher so im Web gefunden habe bringen mich auch nicht weiter. Aber vielleicht ja ihr


----------



## MiDniGG (21. Mai 2008)

Das sollte als Path drinstehen:

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/tree/TreePath.html#TreePath(java.lang.Object[])

wie man hier schön sehen kann:

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTree.html#expandPath(javax.swing.tree.TreePath)

Viel Spaß damit


----------



## cr3m4 (21. Mai 2008)

heisst also ich gebe den path so an wie er mir per

```
System.out.println(jTree1.getSelectionPath());
```

angegeben wird:

```
TreePath path=[Node1, Node2];
```

?


----------



## MiDniGG (21. Mai 2008)

Klingt doch ganz gut. 

Musst mal probieren. Hab mich bisher nur zögerlich an JTree rangewagt. Müsste ma schaun ob ich des Projekt noch i-wo rumliegen hab....

//Edit: Nee sorry. Sowas hab ich nie gemacht ^^ Hab immer nur alles expanded (War nicht so groß  )


----------



## Niki (21. Mai 2008)

Hier ein kleines Beispiel:

```
import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

public class TreeFrame extends JFrame {
	
	private DefaultTreeModel model = null;
	
	private DefaultMutableTreeNode root = null;
	
	private JTree tree = null;
	
	public TreeFrame(){
		super("Tree Demo");
		guiInit();
		pack();
		setLocationRelativeTo(null);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		buildTree();
		expandFirstChild();
	}
	
	private void guiInit(){
		root = new DefaultMutableTreeNode("Root");
		model = new DefaultTreeModel(root);
		tree = new JTree(model);
		
		JScrollPane scroller = new JScrollPane();
		scroller.getViewport().add(tree);
		
		Container cont = getContentPane();
		cont.setLayout(new BorderLayout());
		
		cont.add(scroller, BorderLayout.CENTER);
	}
	
	private void buildTree(){
		DefaultMutableTreeNode child = new DefaultMutableTreeNode("Child #1");
		model.insertNodeInto(child, root, root.getChildCount());
	
		model.insertNodeInto(new DefaultMutableTreeNode("Child #2"), child, child.getChildCount());
	
		model.insertNodeInto(new DefaultMutableTreeNode("Child #3"), root, root.getChildCount());
	}
	
	private void expandFirstChild(){
		DefaultMutableTreeNode secondChild = (DefaultMutableTreeNode)root.getChildAt(0);
		TreePath path = new TreePath(secondChild.getPath());
		tree.expandPath(path);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new TreeFrame().setVisible(true);

	}

}
```


----------



## Beni (21. Mai 2008)

Ein TreePath ist eine Klasse und wird behandelt wie jede andere Klasse:

```
Object[] path = new Object[]{
  wurzel,
  kind,
  kindVonKind,
  knoten
};
TreePath treepath = new TreePath( path );
```

Du musst übrigens unbedingt darauf achten, dass in "path" dieselben Objekte referenziert werden wie im JTree. Also du kannst z.B. "wurzel" _nicht_ durch "new WurzelKlasse()" ersetzen.

[edit: ups, zu langsam]


----------



## cr3m4 (21. Mai 2008)

OK hab was ich wollte hingekriegt, jedoch find ich die Lösung nicht gerade Elegant 

hab einfach die zweite Reihe expandieren lassen und da dei Anzahl der Reihen sich nun erhöht hat, nochmal die nächste Reihe expandieren lassen.


```
TreePath path=jTree1.getPathForRow(1);
jTree1.expandPath(path);

TreePath path2=jTree1.getPathForRow(3);
jTree1.expandPath(path2);
```

trotzdem Danke für die Hinweise.


----------

