【问题标题】:How to create node using string JTree?如何使用字符串 JTree 创建节点?
【发布时间】:2016-06-22 08:53:18
【问题描述】:

为了通过只知道字符串路径来创建 JTree 并插入新节点,我写了以下几行:

private JFrame frame;
JTree tree;
DefaultMutableTreeNode root;
DefaultTreeModel model;

public static void main(String[] args)
{
    test t = new test();
    t.add_new_folder("Data","trial 0");
    t.add_new_folder("Data/trial 0","trial 1");
    t.frame.revalidate();
    t.frame.repaint();

}
public test()
{
    frame = new JFrame();
    tree = new JTree();
    root = new DefaultMutableTreeNode("Data");
    model = new DefaultTreeModel(root);
    tree.setModel(model);
    frame.getContentPane().add(tree, BorderLayout.WEST);
    frame.setVisible(true);
    frame.setSize(500, 500);
}

到这里为止,一切看起来都很好并且正在运行,但是当调用此方法时,它并没有达到预期的结果

    public void add_new_folder(String path,String name){
    String[] data = path.split("/");
    TreePath t = new TreePath(data);
    DefaultMutableTreeNode parent = new DefaultMutableTreeNode(t);
    model.insertNodeInto(new DefaultMutableTreeNode(name), parent, parent.getChildCount());
    model.reload();
}

这就是我得到的

那怎么解决呢?

【问题讨论】:

    标签: java arrays eclipse swing jtree


    【解决方案1】:

    试试这个代码:

    public class Test {
        private JFrame frame;
        JTree tree;
        DefaultMutableTreeNode root;
        DefaultTreeModel model;
        private Map<String, DefaultMutableTreeNode> treeMap;
    
        public static void main(String[] args)
        {
            Test t = new Test();
            t.add_new_folder("Data","trial 0");
            t.add_new_folder("Data/trial 0","trial 1");
            t.frame.revalidate();
            t.frame.repaint();
        }
    
        public Test()
        {
            frame = new JFrame();
            tree = new JTree();
            root = new DefaultMutableTreeNode("Data");
            model = new DefaultTreeModel(root);
            tree.setModel(model);
            frame.getContentPane().add(tree, BorderLayout.WEST);
            frame.setVisible(true);
            frame.setSize(500, 500);
            treeMap = new HashMap<>();
            treeMap.put("Data", root);
        }
    
         public void add_new_folder(String path,String name){
            DefaultMutableTreeNode currentNode = treeMap.get(path);
            DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(name);
            currentNode.add(childNode);
            treeMap.put(path+"/"+name, childNode);
            model.reload();
        }
    }
    

    我知道这是否是你想要的,但它可以成为跟随的线索;)

    【讨论】:

    • 因为您没有将节点添加到根节点中
    【解决方案2】:

    尝试遍历特定节点并获取 TreePath。下面的代码应该对您有所帮助。

        public void add_new_folder(String path,String name){
            String[] data = path.split("/");
    
            TreePath tPath = findPath(data[data.length-1]);
            if(tPath != null){
                ((DefaultMutableTreeNode)tPath.getLastPathComponent()).add(new DefaultMutableTreeNode(name));
            }
        }
    
        @SuppressWarnings("unchecked")
        private TreePath findPath(String s) {
            DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot();
            Enumeration<DefaultMutableTreeNode> e = root.depthFirstEnumeration();
            while (e.hasMoreElements()) {
                DefaultMutableTreeNode node = e.nextElement();
                if (node.toString().equalsIgnoreCase(s)) {
                    return new TreePath(node.getPath());
                }
            }
            return null;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-05
      • 2020-06-22
      • 2012-12-05
      • 2012-03-09
      • 2014-03-25
      • 1970-01-01
      • 2011-04-22
      • 2012-10-01
      相关资源
      最近更新 更多