首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将子节点添加到JTree的父节点

将子节点添加到JTree的父节点
EN

Stack Overflow用户
提问于 2014-10-28 10:29:02
回答 2查看 8.6K关注 0票数 1

我使用Swing控件创建了一个JTree,名为treeWorld。其根节为根和儿童,即哺乳动物、鸟类、爬行动物、两栖动物、昆虫。现在我想添加麻雀,布谷鸟到鸟类编程。

但我不能把麻雀,布谷鸟加到鸟身上。

这是我的代码:

代码语言:javascript
复制
DefaultTreeModel model = (DefaultTreeModel)treeWorld.getModel();

DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();

DefaultMutableTreeNode bird = new DefaultMutableTreeNode("Birds");
DefaultMutableTreeNode sparrow = new DefaultMutableTreeNode("sparrow");

DefaultMutableTreeNode cuckoo = new DefaultMutableTreeNode("cuckoo");
bird.add(sparrow);
bird.add(cuckoo);
this.pack();
this.setVisible(true);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-28 10:54:35

似乎您从未将bird节点添加到您的JTree中的问题,请使用root.add(bird);

如果根节点已经包含了鸟类节点,则需要在root中搜索该节点,而不是创建新的节点。

如果将新节点添加到可见树中,也可以使用model.nodesWereInserted(NODE, new int[]NODE.getChildCount()-1});。添加新子节点的NODE节点。

示例:

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class TestFrame extends JFrame {

    private JTree t;

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
        DefaultMutableTreeNode bird = new DefaultMutableTreeNode("Birds");
        root.add(bird);

        DefaultTreeModel model = new DefaultTreeModel(root);
        add(t=new JTree(model));

        JButton btn = new JButton("add");
        btn.addActionListener(getAddListener());

        add(btn,BorderLayout.SOUTH);
    }

    private ActionListener getAddListener() {
        return new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                DefaultTreeModel model = (DefaultTreeModel)t.getModel();
                DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();

                Enumeration children = root.children();
                while(children.hasMoreElements()){
                    DefaultMutableTreeNode node = (DefaultMutableTreeNode) children.nextElement();
                    if(node.toString().equals("Birds")){

                        DefaultMutableTreeNode sparrow = new DefaultMutableTreeNode("sparrow");
                        DefaultMutableTreeNode cuckoo = new DefaultMutableTreeNode("cuckoo");

                        node.add(sparrow);
                        node.add(cuckoo);
                        model.nodesWereInserted(node, new int[]{node.getChildCount()-1,node.getChildCount()-2});
                        break;
                    }
                }


            }
        };
    }

    public static void main(String args[]) {
        new TestFrame();
    }

}
票数 2
EN

Stack Overflow用户

发布于 2014-10-28 10:43:43

我不确定,因为您还没有发布完整的可运行示例,但我认为,您只需更新您的模型。

代码语言:javascript
复制
bird.add(sparrow);
bird.add(cuckoo);
model.reload(); // your model and tree don't know that you've added some nodes.
this.pack();
this.setVisible(true);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26605981

复制
相关文章

相似问题

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