GUI wird nicht richtig aktualisiert

Status
Nicht offen für weitere Antworten.

RelictMarauder

Neues Mitglied
Hallo!

Habe folgendes Problem. Habe ein kleines Programm geschrieben (s. Quellcode). Bei jedem Buttonklick soll dem JTree im Hauptfenster ein neuer Knoten hinzugefügt werden. Allerdings aktualisiert sich die GUI nicht richtig, obwohl ich repaint() aufgerufen habe.

Sitze jetzt schon länger an diesem Problem und finde keine Lösung. Vielleicht könnt ihr mir helfen 🙂.

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;


public class Main extends JFrame implements ActionListener{

	private JTree tree;
	private JButton button;
	private DefaultMutableTreeNode wurzel;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Main();
	}
	
	public Main() {
		super("Testprogramm");
		createAndShowGUI();
	}

	public void createAndShowGUI(){
		this.setSize(300,300);
		button = new JButton("Node hinzufügen");
		button.addActionListener(this);
		this.getContentPane().add(button,BorderLayout.SOUTH);
		
		wurzel = new DefaultMutableTreeNode("Wurzel");
		DefaultMutableTreeNode node = new DefaultMutableTreeNode("Knoten");
	        wurzel.add(node);
		tree = new JTree(wurzel);
		
		this.getContentPane().add(tree,BorderLayout.CENTER);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e) {
		DefaultMutableTreeNode node = new DefaultMutableTreeNode("Knoten");
		wurzel.add(node);
		this.repaint();
	}

}
 
ein einzelner Node ist ein Dummy-Objekt, der sagt dem JTree oder dessen Model nicht Bescheid
und diese höheren Swing-/ bzw. Kontrollstrukturen schauen auch nicht bei jedem repaint() den ganzen Node-Baum nach Änderungen durch

ein böser Hack wäre:
((DefaultTreeModel)tree.getModel()).nodeStructureChanged(wurzel);

besser aber den Node mit Hilfe des Models einfügen:
treeModel.insertNodeInto(childNode, parent, parent.getChildCount());


siehe Betriebsanleitung (wie kann man mit etwas ohne Anleitung arbeiten?..)
http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html#dynamic
 
JTree hat keine Methode add(DefaultMutableTreeNode). Sieht man sofort wenn man in die API guckt 😉 Deine add-Methode ist von Container geerbt...
In der API ist auch ein Link "How to use Trees" und einer der Punkt in diesem Tutorial ist, wie man Trees dynamisch ändert - genau was Du brauchst.
 
> Tja, Slater war schneller

und auch noch richtiger 😉
denn das add wurde schon halbwegs sinnvoll an der wurzel aufgerufen, nicht am JTree
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben