【问题标题】:How to remove grandchild from JTree?如何从 JTree 中删除孙子?
【发布时间】:2013-05-01 15:29:28
【问题描述】:

我目前的JTree设置如下

  • 儿童 1
    • 孙子 1.1
    • 孙子 1.2
  • 孩子 2
    • 孙子 2.1
    • 孙子 2.2

问题是,我怎样才能删除任何选定的孙子?当我尝试 root.removeNodeFromParent(...) 时,它似乎只适用于 Child 1 和 Child 2 而不是 Grandchild。

DefaultTreeModel model = (DefaultTreeModel) workspaceTree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
DefaultMutableTreeNode child = (DefaultMutableTreeNode) root.getChildAt(0);
child.remove(new DefaultMutableTreeNode("Grandchild 1.1"));
model.reload(root);

我在说 Argument as a child

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing jtree


【解决方案1】:

使用DefaultTreeModel.removeNodeFromParent()

public void removeNodeFromParent(MutableTreeNode 节点)

消息此以从其父节点中删除节点。这将消息 nodesWereRemoved 以创建适当的事件。这是删除节点的首选方式,因为它会为您处理事件创建。

例如:

DefaultMutableTreeNode grandChild = (DefaultMutableTreeNode) child.getChildAt(0);
model.removeNodeFromParent(grandChild);
// no need to reload the root

【讨论】:

  • 我确实尝试了 removeNodeFromParent,它确实适用于孩子,但不适用于孙子
  • 然后发布一个 SSCCE。错误在你的代码中,不看代码是不可能找到的。
  • 完成,这是一段代码和 child.remove(new DefaultMutableTreeNode("Grandchild 1.1"));似乎导致错误
  • 你没有调用我建议你调用的方法。此外,您正在删除一个新节点,因此它不是父节点的子节点,并且恰好与孙子节点具有相同的文本。您必须删除孙节点本身。树中的 DefaultMutableTreeNode 的实例。就像你对一级孩子所做的那样。
  • 觉得你应该给我看一个例子吗?我不明白你的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2022-08-03
  • 2011-08-03
  • 2013-12-20
  • 2011-12-17
  • 1970-01-01
相关资源
最近更新 更多