当我尝试动态更新我的JTree时,它工作得很好,但只显示我的新树。但后来我试图将它添加到JFrame - 没有任何反应。 JTree没有更新。而且我不明白为什么。
public MainForm(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("ROOT");
DefaultTreeModel model = new DefaultTreeModel(root);
tree = new JTree(model);
buildTree(model, "Node 1/Node 2/Node 3/Node 4");
buildTree(model, "Node 1/Node 2/Node 3/Node 5");
buildTree(model, "Node 1/Node 2/Node 3/Node 6");
buildTree(model, "Node 1/Node 2/Node 4/Node 5");
buildTree(model, "Node 1/Node 1/Node 3/Node 5");
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(tree);
frame.setSize(900, 600);
frame.setVisible(true);
//if I comment next line I`ll get just a tree in my frame (but updated
//as I wanted);
//But if not I`ve got my form with buttons and tree, but tree doesn`t
//update
frame.setContentPane(rootMainForm);
}
答案 0 :(得分:1)
您也应该将tree
添加到rootMainForm
。
这一行
frame.add(tree)
将树添加到ContentPane
而这一行
frame.setContentPane(rootMainForm);
覆盖框架的整个ContentPane
。我敢打赌你有2个JTree。当您评论最后一行时,您会看到最近添加的组件(tree
此处)。取消注释后,您将使用未知的面板rootMainForm
覆盖整个框架内容
您的评论让我想到,您尝试在此行中更新您的jtree
tree = new JTree(model);
这将创建与GUI分离的全新JTree
。如果您想更新现有的JTree,只需使用tree.setModel(model)
tree=new JTree(model)