Ich habe eine JTree, projectView
:Entfernen Kinder aus DefaultMutableTreeNode rekursiv nicht in Rahmen aktualisieren richtig
projectView = new JTree(projectViewTop);
projectView.setBackground(Color.WHITE);
projectView.setSize(250, getHeight());
projectView.setLocation(0, 0);
projectView.setVisible(true);
projectView.addKeyListener(this);
add(projectView);
Wo projectViewTop
der Hauptknoten (DefaultMutableTreeNode
) des JTree:
DefaultMutableTreeNode projectViewTop = new DefaultMutableTreeNode("Project");
Die projectViewTop
hat einige untergeordnete Knoten, die auch Unter-Untergeordnete enthalten (ProjektViewTop ist der Knoten 'Projekt [Mein Projekt]'):
An einem Punkt muss ich jedes Kind des projectViewTop
Knoten löschen. Ich habe diese Methode, um sie rekursiv zu löschen:
public void clearNode(DefaultMutableTreeNode node) {
for (int i = 0; i < node.getChildCount(); i++) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(i);
clearNode(child);
}
node.removeAllChildren();
}
Allerdings, wenn ich diese Methode ausführen, wird der Inhalt nicht visuell gelöscht bekommen. Dies ist, was mit dem JTree Anzeige passiert:
Auf der anderen Seite, wenn ich den Hauptknoten kollabieren, es löscht alles richtig (es scheint, die Visuals nur aktualisiert, wenn ich den Hauptknoten kollabieren). Wie kann ich verhindern, dass "schmutzige" Kinderknoten beim Löschen auf dem Hauptknoten bleiben?
@AndrewThompson Ich meine, ich habe versucht, dies so einfach wie möglich zu machen, weil das Problem wahrscheinlich eine fehlende Aussage/ein Fehler an meinem Ende ist. Wenn Sie denken, ich sollte etwas ändern, lassen Sie es mich wissen? – Momo
Sie müssen das 'TreeModel' benachrichtigen, dass sich die Struktur geändert hat,' DefaultTreeModel' hat ein ['nodesWereRemoved'] (https://docs.oracle.com/javase/7/docs/api/javax/swing/tree/ DefaultTreeModel.html # nodesWereRemoved (javax.swing.tree.TreeNode,% 20int [],% 20java.lang.Object [])) Methode, die Sie verwenden können, wenn Sie ein 'DefaultTreeModel' verwenden, wissen die Knoten selbst nichts über das Modell ... yep, es ist alles Spaß Zeug – MadProgrammer
@MadProgrammer Ich habe stattdessen die 'nodeStructureChanged' Methode verwendet, macht es das Zeug ganz von selbst. Ziemlich praktisch. Wenn es Ihnen nichts ausmacht, können Sie die Antwort schreiben, und ich werde es als akzeptiert markieren – Momo