首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么只有在创建JTree之前填充了关联的DefaultTreeModel,JTree才会显示数据?

为什么只有在创建JTree之前填充了关联的DefaultTreeModel,JTree才会显示数据?
EN

Stack Overflow用户
提问于 2014-08-29 06:11:50
回答 1查看 42关注 0票数 0

我在一个名为TreeFrameJFrame的子类的构造函数中有这段代码。我想在JTree中显示3个级别,每个级别10个项目。为什么它会像预期的那样工作:

代码语言:javascript
复制
private DefaultTreeModel treeModel;
private DefaultMutableTreeNode r;
private JTree tree;
...
r = new DefaultMutableTreeNode("ROOT");
treeModel = new DefaultTreeModel(r);

for (int i = 0; i < 10; i++) {
    String a = "Object " + i;
    DefaultMutableTreeNode aNode = new DefaultMutableTreeNode(a);
    treeModel.insertNodeInto(aNode, r, r.getChildCount());
    for (int j = 0; j < 10; j++) {
        String b1 = "Sub-Object " + j;
        DefaultMutableTreeNode bNode = new DefaultMutableTreeNode(b1);
        treeModel.insertNodeInto(bNode, aNode, aNode.getChildCount());
        for (int k = 0; k < 10; k++) {
            String c = "Sub-Sub-Object " + k;
            treeModel.insertNodeInto(new DefaultMutableTreeNode(c),
                    bNode, bNode.getChildCount());
        }
    }
}

tree = new JTree(treeModel);

除了根节点,这不会显示任何内容?我只将最后一条指令tree = new JTree(treeModel);移到了周期块之前。

代码语言:javascript
复制
private DefaultTreeModel treeModel;
private DefaultMutableTreeNode r;
private JTree tree;
...
r = new DefaultMutableTreeNode("ROOT");
treeModel = new DefaultTreeModel(r);
tree = new JTree(treeModel);

for (int i = 0; i < 10; i++) {
    String a = "Object " + i;
    DefaultMutableTreeNode aNode = new DefaultMutableTreeNode(a);
    treeModel.insertNodeInto(aNode, r, r.getChildCount());
    for (int j = 0; j < 10; j++) {
        String b1 = "Sub-Object " + j;
        DefaultMutableTreeNode bNode = new DefaultMutableTreeNode(b1);
        treeModel.insertNodeInto(bNode, aNode, aNode.getChildCount());
        for (int k = 0; k < 10; k++) {
            String c = "Sub-Sub-Object " + k;
            treeModel.insertNodeInto(new DefaultMutableTreeNode(c),
                    bNode, bNode.getChildCount());
        }
    }
}

也许这与没有将new TreeFrame()放在EDT线程中有关?

EN

回答 1

Stack Overflow用户

发布于 2014-08-29 08:15:39

这两种方法都很好地构建了模型,所有数据都在那里,问题是在第二个示例中,默认情况下根节点是折叠的。

在构建完模型之后,尝试添加tree.expandPath(new TreePath(r));

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25558826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档