# JTree alle nodes expanden



## TheG (18. Mai 2006)

Hi, mein Problem: 

Ich möchte, dass in meinem JTree alle nodes automatisch immer expanded werden.
Hab gesehn dass hier schon einer dasselbe problem hatte, aber darauf wurde leider nicht geantwortet.

Wie mach ich das am besten?
hab in der  Dokumentation leider nichts gefunden...

Ich verwende die expandNode - Methode die einen TreePath bekommt, aber wie krieg ich den von ner bestimmten Node? Kann ich der Methode auch ne Node übergeben? Oder wie kann ich die Node identifizieren? 

Dankeschön schonmal !!

TheG


----------



## Beni (18. Mai 2006)

Da musst du immer einen TreePath angeben. Den Path kannst du nur aus deinen Daten zusammenbauen. Du kennst die Wurzel des Baumes, und das ist der erste TreePath. Dann baust du aus Wurzel und den Kindern der ersten Ebene weitere TreePaths. Dann mit den Kindern aus der zweiten Ebene...

Vielleicht hilft dir auch das hier.


----------



## AlArenal (18. Mai 2006)

Müsste auch anders und einfacher gehen, denn es gibt auch #expandNode(int rowIndex). Da muss man doch wohl einer Schleife nur immer den Node in der nächsten Reihe expanden, Anzahl der Reihen neu bestimmen, ... bis die letzte Reihe erreicht ist.


----------



## André Uhres (20. Mai 2006)

TheG hat gesagt.:
			
		

> ..Wie mach ich das am besten?..


http://javaalmanac.com/egs/javax.swing.tree/ExpandAll.html
Oder: 

```
for (int i = 0; i < tree.getRowCount() ; i++) tree.expandRow( i );
```


----------



## lhein (20. Mai 2006)

```
// If expand is true, expands all nodes in the tree.
    // Otherwise, collapses all nodes in the tree.
    public void expandAll(JTree tree, boolean expand) 
    {
        TreeNode root = (TreeNode)tree.getModel().getRoot();
    
        // Traverse tree from root
        expandAll(tree, new TreePath(root), expand);
    }
    
    private void expandAll(JTree tree, TreePath parent, boolean expand) 
    {
        // Traverse children
        TreeNode node = (TreeNode)parent.getLastPathComponent();

        if (node.getChildCount() >= 0) 
        {
            for (Enumeration e=node.children(); e.hasMoreElements(); ) 
            {
                TreeNode n = (TreeNode)e.nextElement();
                TreePath path = parent.pathByAddingChild(n);
                expandAll(tree, path, expand);
            }
        }
    
        // Expansion or collapse must be done bottom-up
        if (expand) {
            tree.expandPath(parent);
        } else {
            tree.collapsePath(parent);
        }
    }
```

Der Code aus dem Link ist schon gut. Einziges Problem bei dem Code ist, dass der Ersteller davon ausgeht, dass bereits alle Tree-Elemente im Model sind. Das ist für den Heimbedarf oder für Trees mit definiert wenig Elementen sicherlich in Ordnung, aber für größere Sachen ungeeignet. 

lr


----------

