4

我有一个关于如何动态生成 JTrees 的问题。有没有办法在不使其子节点不可见的情况下将根节点设置为不可见?我尝试执行以下操作,但它将所有节点显示为不可见。请记住,我想随时添加和删除根节点的子节点。我添加了评论,以便您可以按照我的意图进行操作。让我知道他们是否在做我不需要的事情,因为我是 JTrees 的新手并且不知道约定。我还希望能够为听众选择多个孩子。

    DefaultMutableTreeNode rootNode;
    rootNode = new DefaultMutableTreeNode(); //I want this invisible.

    DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
    JTree tree = new JTree(treeModel);

    treeModel.addTreeModelListener(this);
    tree.setRootVisible(false); // Sets everything invisible
    tree.setEditable(true); //makes tree dynamic
    tree.setShowsRootHandles(true); //supposedly allows you to see the children of the nodes.

    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 
    //I would like the line above to be multi-select; however, this doesn't seem to be an option.

    DefaultMutableTreeNode table = new DefaultMutableTreeNode( "table1");
    rootNode.add(book);

    DefaultMutableTreeNode value = new DefaultMutableTreeNode( "value");
    table.add(value);

在上面的例子中。什么都没有显示,当我删除“tree.setRootVisible(false)”时,一切都是可见的,包括节点。

4

4 回答 4

7

一个很晚的答案,但我刚刚遇到了同样的问题。确保扩展您的根节点,使其子节点变得可见:

yourTree.expandPath(new TreePath(root.getPath()))
于 2012-09-21T14:36:35.760 回答
2

我想说问题中的代码和 TreeDemo 中的代码之间的区别在于树演示在创建实际树之前创建并添加了它的所有节点。如果要动态添加节点(在创建树之后),则应通过 TreeModel 完成。否则不会生成表明树已更改的事件。至少这就是教程似乎说的关于编辑节点的“内容”的内容,可能是同一个问题:

请注意,尽管 DefaultMutableTreeNode 具有更改节点内容的方法,但更改应通过 DefaultTreeModel 覆盖方法。否则,不会生成树模型事件,并且诸如树之类的侦听器将不知道更新。

某人的解决方案

于 2012-01-10T02:23:44.183 回答
1

对我来说很好。我的测试基于如何使用树的 Swing 教程中的 TreeDemo 。将您的代码与教程代码进行比较,看看有什么区别。

于 2009-12-16T20:10:59.827 回答
0

一个很晚的答案,我是一个java初学者并且有同样的问题,所以它可能会有所帮助。

setRootVisible(false) 也为我隐藏了所有节点,所以我添加了 setShowsRootHandles(true) 来显示所有节点:

tree.setRootVisible(false);
tree.setShowsRootHandles(true)

我希望它有帮助! https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html#display

于 2018-01-12T13:56:15.723 回答