Hey, dummer Titel, es geht um folgendes:
(ausführbares Programm, Copy&Paste)
...wie ihr merkt, reagiert die Anzeige des JTrees nicht mehr, sobald sie einmal aktiviert wurde. Heisst: Man kann anfangs zB 5x auf den "+"-Button klicken. Wenn man den Baum dann anklickt und ausklappt hat er 5 kinder.
Sobald man das aber getan hat, hat man keine Chance mehr, eine aktualisierte Anzeige zu bekommen.
Was aber noch viel witziger ist:
Erstellt mal ein paar Knoten, klappt den Baum aus, dann klickt auf den "X"-Button, der alle Kinder löscht. Klickt nochmal auf den Baum (er sollte jetzt keine Kinder mehr anzeigen).
ABER jetzt kommt's: Addet nochmal paar Kinder, und klappt ihn wieder aus... surprise?! Er zeigt die ALTEN Kinder an, die eig. gelöscht sein sollten.
...wenn ihr die Ausgaben auf der Konsole beobachtet, seht ihr dass dort alles eigentlich richtig funktioniert.
Also irgendwas ist da doch total kaputt in der Anzeige von JTrees.
Und in meinem Programm habe ich jetzt genau diese Fehler. Er refresht sich erstens niemals, egal ob validate oder repaint, zweitens speichert er irgendwo im Nirvana alte Kinder und zeigt die an anstatt die neuen..
Bitte hier um Hilfe, wer kennt sich im Umgang mit JTrees aus?
Merci
(ausführbares Programm, Copy&Paste)
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
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.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class JTreeTest extends JFrame {
public static void main(String[] x){
new JTreeTest().setVisible(true);
}
private JTree tree;
private DefaultMutableTreeNode root;
public JTreeTest(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
root = new DefaultMutableTreeNode("JTree Test");
tree = new JTree(root);
tree.setPreferredSize(new Dimension(150,300));
JButton addNode = new JButton("+");
addNode.addActionListener(new ActionListener(){
private int count = 0;
@Override
public void actionPerformed(ActionEvent e) {
root.add(new DefaultMutableTreeNode("node "+ ++count));
tree.validate();
tree.repaint();
System.out.println("root childs now:");
for(int i = 0;i<root.getChildCount();i++){
System.out.println("\t"+root.getChildAt(i));
}
}
});
JButton clear = new JButton("X");
clear.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
root.removeAllChildren();
tree.validate();
tree.repaint();
System.out.println("root childs now:");
for(int i = 0;i<root.getChildCount();i++){
System.out.println("\t"+root.getChildAt(i));
}
}
});
JPanel buttons = new JPanel();
buttons.add(addNode);
buttons.add(clear);
setLayout(new BorderLayout());
add(buttons,BorderLayout.NORTH);
add(tree,BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
}
}
...wie ihr merkt, reagiert die Anzeige des JTrees nicht mehr, sobald sie einmal aktiviert wurde. Heisst: Man kann anfangs zB 5x auf den "+"-Button klicken. Wenn man den Baum dann anklickt und ausklappt hat er 5 kinder.
Sobald man das aber getan hat, hat man keine Chance mehr, eine aktualisierte Anzeige zu bekommen.
Was aber noch viel witziger ist:
Erstellt mal ein paar Knoten, klappt den Baum aus, dann klickt auf den "X"-Button, der alle Kinder löscht. Klickt nochmal auf den Baum (er sollte jetzt keine Kinder mehr anzeigen).
ABER jetzt kommt's: Addet nochmal paar Kinder, und klappt ihn wieder aus... surprise?! Er zeigt die ALTEN Kinder an, die eig. gelöscht sein sollten.
...wenn ihr die Ausgaben auf der Konsole beobachtet, seht ihr dass dort alles eigentlich richtig funktioniert.
Also irgendwas ist da doch total kaputt in der Anzeige von JTrees.
Und in meinem Programm habe ich jetzt genau diese Fehler. Er refresht sich erstens niemals, egal ob validate oder repaint, zweitens speichert er irgendwo im Nirvana alte Kinder und zeigt die an anstatt die neuen..
Bitte hier um Hilfe, wer kennt sich im Umgang mit JTrees aus?
Merci