Я делаю JTree, и у меня есть кнопка, которая удаляет узел из дерева. Каждый раз, когда я удаляю узел с помощью кнопки, дерево автоматически обрушивается. Я читал, что это потому, что я использую .reload()
. Я также прочитал некоторые ответы SO, которые предложили использовать .nodeChanged(node)
, который я пробовал, но когда я его использую, я считаю, что модель обновляется, но дерево не перезагружается соответственно в графическом интерфейсе. Как я могу заставить дерево не рухнуть?Как остановить JTree от свертывания после удаления узла из дерева
Вот простой SSCCE с по умолчанию JTree и кнопка удаления узла
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
public class StopTreeCollapse extends JApplet {
JTree tree = new JTree();
JButton jbtRemove = new JButton("Remove Node");
public StopTreeCollapse(){
add(new JScrollPane(tree), BorderLayout.CENTER);
add(jbtRemove, BorderLayout.SOUTH);
jbtRemove.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
TreePath[] paths = tree.getSelectionPaths();
if (paths == null) {
JOptionPane.showMessageDialog(null,
"No node in the tree is selected");
return;
}
DefaultMutableTreeNode node = null;
for (TreePath path : paths) {
node = (DefaultMutableTreeNode) (path.getLastPathComponent());
if (node.isRoot()) {
JOptionPane.showMessageDialog(null, "Cannot remove the root");
} else {
node.removeFromParent();
}
}
((DefaultTreeModel) tree.getModel()).reload();
}
});
}
}
Genius ......... –
'((DefaultTreeModel) tree.getModel()). RemoveNodeFromParent (node);' все равно сворачивает все дерево для меня, и я никогда не вызывал 'reload() 'просто' updateUI() ' – Troyseph