# JTree auslesen



## Thore5 (1. Aug 2008)

Hallo zusammen

Ich habe eine kleine Frage, wo ich nicht ganz durch steig...

Ich habe eine JTabbedPane, auf die bei jedem erzeugten Tab ein JSrcollPane mit einem JTree drauf kommt...
Nun möchte ich einen JTree auslesen. Wie muss ich das genau casten, damit ich den gweünschten JTree (derjenige im selectedIndex) erhalte. Ich steig da irgendwie nicht so ganz durch...

Vielen Dank

ThoRe


```
package gui;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class AnlegenTab extends JFrame implements ActionListener{

	private JPanel pnlNorth = new JPanel();
	private JTabbedPane pane = new JTabbedPane();
	private JButton btn1 = new JButton("Click");
	private JPanel pnlPriv = null;
	private JScrollPane scrl = null;
	int i=0;
	public AnlegenTab(){
		super("Tree Builder");
		this.setBounds(50,20,1200,740);
		this.getRootPane().setWindowDecorationStyle(0);
		this.getContentPane().add(pnlNorth,BorderLayout.NORTH);
		this.getContentPane().add(btn1,BorderLayout.SOUTH);
		btn1.addActionListener(this);
		this.setVisible(true);	
		this.setResizable(false);

		pnlNorth.add(pane);
		
		
	}
	public void actionPerformed(ActionEvent ae) {
		if (ae.getSource()== btn1){
			pnlPriv = new JPanel();
			pnlPriv.setSize(200, 200);
			
			 DefaultMutableTreeNode root =  new DefaultMutableTreeNode("Root");
				  root.add(new DefaultMutableTreeNode("Child B"));
				  root.add(new DefaultMutableTreeNode("Child A"));
				  JTree tree = new JTree(root);
				  scrl = new JScrollPane(tree);
			pnlPriv.add(scrl);
			pane.add((new Integer(i)).toString(),pnlPriv);
			i++;
		}
		
	}
	public static void main(String[] args)
    {
		new AnlegenTab();        
    }

}
```


----------



## AlArenal (1. Aug 2008)

Was sollenw ir uns unter "auslesen" vorstellen und wo willst du zu welchem Zweck von wo nach wo casten?


----------



## Thore5 (1. Aug 2008)

Also, ich erstelle im späteren Verlauf ein aus meinen Tabs. Das gepostete Beispiel ist nur eine kleine Funktionsübericht.
Damit ich z.B. ein pdf vom Tab 1 erstellen kann muss ich ja den JTree, welcher sich auf dem Tab 1 befindet wieder aus dem Tab auslesen. Dieser wird natürlich dynamisch erstellt und abgefüllt...


Nun, das mit dem Cast, habe ich mir nur so vorgestellt.  Weil das auslesen ja folgendermassen funktioniert:


```
depNode = (DefaultMutableTreeNode) Gui.treeDependices.getModel().getRoot();
TreeNode nd =(depNode.getChildAt(0));
```
nur kann ich so immer nur den JTree auf dem letzten Tab auslesen. Deshalb muss ich ja irgendwie auch die anderen Tabs einmal auslesen...

Ich hoffe, meien Schilderungen etwas präzisieren...


----------



## André Uhres (3. Aug 2008)

Thore5 hat gesagt.:
			
		

> Also, ich erstelle im späteren Verlauf ein aus meinen Tabs.


Gibt dir etwas mehr Mühe beim Formulieren, solche nichtssagenden Sätze helfen uns nicht.
Vielleicht hilft dir dies:

```
...
                int max = tabbedPane.getTabCount();
                for (int i = 0; i < max; i++) {
                    JScrollPane scrollpane = (JScrollPane) tabbedPane.getComponentAt(i);
                    traverse((JTree) scrollpane.getViewport().getView());
                }
...
    public void traverse(JTree tree) {
        TreeModel model = tree.getModel();
        Object root;
        if (model != null) {
            root = model.getRoot();
            walk(model,root);
        } else{
            System.out.println("Tree is empty.");
        }
    }
    protected void walk(TreeModel model, Object o){
        int  cc;
        cc = model.getChildCount(o);
        for( int i=0; i < cc; i++) {
            DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(o, i );
            if (model.isLeaf(child) ){
                System.out.println(child);
            }else {
                System.out.println(child);
                walk(model,child );
            }
        }
    }    
...
```


----------



## Thore5 (3. Aug 2008)

Hallo

Danke für deine Antwort. Hat mich auf die richtige Spur gebracht...

Ja, das mit den nichtssagenden Sätzen werde ich mir zu Herzen nehmen...


----------

