当我试图将它添加到JFrame时,JTree不会更新

时间:2017-09-12 22:24:21

标签: java swing

当我尝试动态更新我的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);

}

1 个答案:

答案 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)