JTree knoten wird nicht übernommen

brainjay

Mitglied
Hi Leute,

ich bin langsam am verzweifeln. Ich habe euch mal den Code rauskopiert, mit dem ich Probleme habe.
Ich versuche mir einen Baum anzulegen, der 10 Knoten haben die Kind 0, Kind 1 ... Kind n heißen.
Anschließend möchte ich Kind 1, 5 Knoten hinzufügen (mit dem Namen "Noch ein Kind 1" , "Noch ein Kind 2 usw.). Wenn ich nun den Baum expandieren will, besitzt Kind 1 keine Kinder... und ich weiß nicht wieso. Ich hoffe das mir jemand weiterhelfen kann. Ach ja das ding hat keine GUI sondern muss debuggt werden :) Danke für eure Hilfe

Java:
public class Probs {
	
	static DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
	static DefaultTreeModel model = new DefaultTreeModel(root);
	static JTree tree = new JTree(model);

	public static void expandAll(boolean expand){
		TreeNode n = (TreeNode)tree.getModel().getRoot();
		expandAll(new TreePath(n), expand);
	}

	private static void expandAll(TreePath parent, boolean expand){

		TreeNode node = (TreeNode)parent.getLastPathComponent();
		int count = node.getChildCount();

		if(count >=0){
			for(Enumeration e = node.children(); e.hasMoreElements(); ){
				TreeNode n = (TreeNode)e.nextElement();
				TreePath path = parent.pathByAddingChild(n);
				System.out.println("KIND "+ n.toString());
				expandAll(path, expand);
			}
		}

		if(expand){
			tree.expandPath(parent);
		}
		else{

			tree.collapsePath(parent);
		}
	}
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub


		for(int i =0; i < 10; i++){
			DefaultMutableTreeNode node = new DefaultMutableTreeNode("Kind " + i);
			model.insertNodeInto(node, root, root.getChildCount());
		}

		Object[] objects = new Object[2];
		DefaultMutableTreeNode kind =new DefaultMutableTreeNode("Kind 1");
		objects[0] = new DefaultMutableTreeNode(tree.getModel().getRoot());
		kind.setParent(root);
		objects[1] = kind;
		TreePath treepath = new TreePath(objects);



		for(int i = 0; i < 5; i++){
			DefaultMutableTreeNode child = new DefaultMutableTreeNode("Noch ein kind"+i);
			//node2 = (DefaultMutableTreeNode) tp.getLastPathComponent();
			DefaultMutableTreeNode node2 = (DefaultMutableTreeNode) treepath.getLastPathComponent();

			model.insertNodeInto(child, node2, node2.getChildCount());
			int counter =node2.getChildCount();
			System.out.println("ss");

			for(int p = 0; p < counter; p ++){
				System.out.println("Kindname: " + node2.getChildAt(p).toString());
			}
			TreeNode[] path = model.getPathToRoot(node2);
			tree.expandPath(new TreePath(path));
		}

		expandAll(true);


	}

}
 

brainjay

Mitglied
Hier mit GUI:

Java:
package test;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

import java.awt.BorderLayout;
import java.util.Enumeration;

public class Tes {

	private JFrame frame;
	DefaultMutableTreeNode root;
	DefaultTreeModel model;
	JTree tree;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Tes window = new Tes();
					window.frame.setVisible(true);
					window.addTree();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Tes() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		root = new DefaultMutableTreeNode("root");
		model = new DefaultTreeModel(root);
		tree = new JTree(model);
		frame.getContentPane().add(tree, BorderLayout.CENTER);
	}
	
	public void addTree(){
		for(int i =0; i < 10; i++){
			DefaultMutableTreeNode node = new DefaultMutableTreeNode("Kind " + i);
			model.insertNodeInto(node, root, root.getChildCount());
		}

		Object[] objects = new Object[2];
		DefaultMutableTreeNode kind =new DefaultMutableTreeNode("Kind 1");
		objects[0] = new DefaultMutableTreeNode(tree.getModel().getRoot());
		kind.setParent(root);
		objects[1] = kind;
		TreePath treepath = new TreePath(objects);

		for(int i = 0; i < 5; i++){
			DefaultMutableTreeNode child = new DefaultMutableTreeNode("Noch ein kind"+i);
			//node2 = (DefaultMutableTreeNode) tp.getLastPathComponent();
			DefaultMutableTreeNode node2 = (DefaultMutableTreeNode) treepath.getLastPathComponent();

			model.insertNodeInto(child, node2, node2.getChildCount());
			int counter =node2.getChildCount();
			System.out.println("ss");
			
			for(int p = 0; p < counter; p ++){
				System.out.println("Kindname: " + node2.getChildAt(p).toString());
				model.nodeStructureChanged(node2);
			}
			TreeNode[] path = model.getPathToRoot(node2);
			tree.expandPath(new TreePath(path));
		}

		expandAll(true);
	}
	
	public void expandAll(boolean expand){
		TreeNode n = (TreeNode)tree.getModel().getRoot();
		expandAll(new TreePath(n), expand);
	}

	private void expandAll(TreePath parent, boolean expand){

		TreeNode node = (TreeNode)parent.getLastPathComponent();
		int count = node.getChildCount();

		if(count >=0){
			for(Enumeration e = node.children(); e.hasMoreElements(); ){
				TreeNode n = (TreeNode)e.nextElement();
				TreePath path = parent.pathByAddingChild(n);
				System.out.println("KIND "+ n.toString());
				expandAll(path, expand);
			}
		}

		if(expand){
			tree.expandPath(parent);
		}
		else{

			tree.collapsePath(parent);
		}
	}

}
 

Michael...

Top Contributor
Der Code ist mir zu wüst, um den ernsthaft duch zu schauen.

Eventuell liegt es ja an setParent(MutableTreeNode newParent). Zumindest hörst sich der Kommentar in der Doku für mich so an, als würde ich die Methode nur in ganz speziellen Fällen nutzen wollen.
Sets this node's parent to newParent but does not change the parent's child array.

Allgemeiner Hinweis: DefaultMutableTreeNode kennt die Methode add(MutableTreeNode) um einem Knoten Kindknoten hinzuzufügen. (Das muss bei der Initialisierung nicht unbedingt über das Model laufen)
 

brainjay

Mitglied
ich habs jetzt mal mit deiner methode probiert, leider fehlanzeige... ich glaube das hat damit zu tun das ich mir den TreePath selber zusammen bastle, denn wenn ich vom rootknoten einen knoten auswähle und den hinzufüge funktioniert es. Ich muss mir aber einen TreePath selber erstellen... Kennt jemand eine möglichkeit sich einen TreePath selber zu erstellen?
 

Michael...

Top Contributor
Warum über den TreePath einen Baum erzeugen?

Beim TreePath musst Du sicherstellen, dass sich darin die identischen Objekte/Nodes befinden, die sich auch im Tree befinden.
Wie ich das sehe erstellst Du zwischendurch neue TreeNodes und packst diese in einen TreePath. Auch wenn der TreePath dann genauso aussieht/aussehen sollte, als würde er aus dem Tree stammen, stammt er natürlich nicht aus diesem und der Versuch über diesen TreePath neue Knoten hinzuzufügen wird scheitern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
F JTree-Knoten (DefaultMutableTreeNode) formatieren ? Java Basics - Anfänger-Themen 3
Y JTree: ein Knoten als Objekt Java Basics - Anfänger-Themen 2
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
F Jtree kürzt Namen auf ... Java Basics - Anfänger-Themen 4
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
H Best Practice Wo wird der rootNode eines JTree gespeichert... Java Basics - Anfänger-Themen 0
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
R JTree bewegen Java Basics - Anfänger-Themen 6
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
G bestimmte dateiendungen in jtree rausfiltern Java Basics - Anfänger-Themen 7
P JTree aus txt Java Basics - Anfänger-Themen 8
M Warum wird mein Icon bei den JTree Nodes nicht angezeigt? Java Basics - Anfänger-Themen 7
JStickman JTree, JScrollPane, Liste mit graphischer Suchleiste - Dateimanager Java Basics - Anfänger-Themen 10
M JTree + JTab Java Basics - Anfänger-Themen 3
T JTree füllen Java Basics - Anfänger-Themen 3
S JTree Hilfe Java Basics - Anfänger-Themen 6
P Jtree MouseListener und NoCollapse Java Basics - Anfänger-Themen 2
M JTree ohne root anzeigen Java Basics - Anfänger-Themen 5
F JTree mit JSpinner Java Basics - Anfänger-Themen 2
I Liste von Dateien anzeigen/JTree Java Basics - Anfänger-Themen 4
G Zugriff auf JTree-Objekt Java Basics - Anfänger-Themen 2
K Problem: JTree mit integrierten JCheckboxen Java Basics - Anfänger-Themen 5
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
D JTree ich dreh durch :D Java Basics - Anfänger-Themen 2
T JTree root setzten Java Basics - Anfänger-Themen 13
G xml Datei in JTree Java Basics - Anfänger-Themen 2
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
R Problem mit JTree und JTable Java Basics - Anfänger-Themen 16
A JTree drucken Java Basics - Anfänger-Themen 2
M JTree und ein Button mit ActionListener Java Basics - Anfänger-Themen 3
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
G Filesystem in JTree anzeigen Java Basics - Anfänger-Themen 4
A Jtree Aufbau Java Basics - Anfänger-Themen 5
G JTree ilstener Java Basics - Anfänger-Themen 3
G JTree Java Basics - Anfänger-Themen 2
G Erstellten JTree aus einer XML-Datei akktualisieren Java Basics - Anfänger-Themen 11
S jTree initialisierung Java Basics - Anfänger-Themen 4
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
J ArrayListen mit Name und Vater an JTree übergeben Java Basics - Anfänger-Themen 3
G aussehen vom jtree wiederherstellen Java Basics - Anfänger-Themen 3
P JTree mit mehreren Wurzeln Java Basics - Anfänger-Themen 2
G Umbenennen im JTree Java Basics - Anfänger-Themen 5
G rechter Mausklick im JTree Java Basics - Anfänger-Themen 2
G Bilder im jTree Java Basics - Anfänger-Themen 3
G jTree Pfad merken Java Basics - Anfänger-Themen 2
S JTree aktualisieren Java Basics - Anfänger-Themen 4
M JTree aktualisieren Java Basics - Anfänger-Themen 3
E JTree - Element suchen Java Basics - Anfänger-Themen 5
G JTree Problem. Java Basics - Anfänger-Themen 5
G JTree Java Basics - Anfänger-Themen 2
E JTree - Verzeichnisbaum Java Basics - Anfänger-Themen 3
G JTree Frage Java Basics - Anfänger-Themen 5
G Ebene von JTree ermitteln? Java Basics - Anfänger-Themen 6
G Icons für JTree skalieren? Java Basics - Anfänger-Themen 3
G Standard JTree ausblenden? Java Basics - Anfänger-Themen 5
B JTree mit Verzeichnissen füllen Java Basics - Anfänger-Themen 17
G Object vor reload von JTree merken und danach wieder setzen? Java Basics - Anfänger-Themen 5
P Wert aus JTree in ComboBox setzen? Java Basics - Anfänger-Themen 2
G Problem mit Refresh von JTree Java Basics - Anfänger-Themen 11
lomtas Scrollbalken für JTree Java Basics - Anfänger-Themen 3
lomtas JTree Struktur im Nachhinein ändern Java Basics - Anfänger-Themen 2
K JTree verlinken Java Basics - Anfänger-Themen 3
T ArrayList mit Dateien in die richtigen Ordner eines JTree Java Basics - Anfänger-Themen 16
K JTree aus DB rekursiv füllen Java Basics - Anfänger-Themen 12
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
G JTree vollständigen pfad anzeigen Java Basics - Anfänger-Themen 11
R JTree aus einer ArrayList Java Basics - Anfänger-Themen 9
J JTree Bilder Java Basics - Anfänger-Themen 2
G JTree.TreeListener Java Basics - Anfänger-Themen 12
S JTree valueChanged() Ausgabe leider immer mit Pfadangabe! Java Basics - Anfänger-Themen 4
S JTree aktualisieren bzw. komplett neu aufbauen Java Basics - Anfänger-Themen 6
G Scrollen im JTree Java Basics - Anfänger-Themen 17
G Hintergrundsfarbe für JTree Java Basics - Anfänger-Themen 15
J JTable / JTree: Unsichtbare Elemente Java Basics - Anfänger-Themen 4
G JTree Explorer Problem mit listRoots() Java Basics - Anfänger-Themen 9
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
Cassy3 Binärer Suchbaum Knoten rauslöschen Java Basics - Anfänger-Themen 1
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
S Binärbäume knoten zählen Java Basics - Anfänger-Themen 16
T Collections Methode (Knoten hinzufügen) für Graphen Java Basics - Anfänger-Themen 32
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
G Binärer Suchbaum Knoten zählen Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
E Knoten eines Baumes unter Bedinung zählen Java Basics - Anfänger-Themen 2
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
L Graphen: Anzahl Knoten // Knoten in Array speichern Java Basics - Anfänger-Themen 4
I Erste Schritte Referenz zum Knoten davor, in einer Liste Java Basics - Anfänger-Themen 4
J Max. Anzahl von Knoten im Binärbaum Java Basics - Anfänger-Themen 3
M Werte der Knoten in Binärbaum addieren (iterativ) Java Basics - Anfänger-Themen 6
S Baumstruktur: tiefsten Knoten finden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben