【问题标题】:JTree wont update [duplicate]JTree不会更新[重复]
【发布时间】:2015-05-14 19:35:26
【问题描述】:

我正在尝试向我的 JTree 添加一个节点。我是这样做的:

    DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
    DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(event.getObjectThatHasChanged());
    root.add(newNode);
    ((DefaultTreeModel) tree.getModel()).reload();

但是,树本身不会更新。我读过posts 说 reload() 是你应该调用的,但没有效果。另请注意,这是在 EDT 上调用的。有什么想法吗?

编辑:

我已经尝试过这种方法:

    DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
    DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(event.getObjectThatHasChanged());
    ((DefaultTreeModel) tree.getModel()).
            insertNodeInto(newNode, root, root.getChildCount() - 1);

还是不行。但是,当我关闭程序并重新打开它时,新节点就在那里。 (我坚持我的数据)。

【问题讨论】:

  • 对于example
  • @MadProgrammer 你使用node.getChildCount()),因为copeg在他的例子中有node.getChildCount() - 1)。你能澄清哪个是正确的吗?
  • @user489041 Java是零索引,所以实际的节点数是getChildCount - 1。所以在给父模式添加一个节点后,需要引用最后一个节点...

标签: java swing jtree


【解决方案1】:

使用DefaultTreeModelinsertNodeInto 方法将节点添加到JTree。引用 API

然后,这将向 nodesWereInserted 发送消息以创建适当的事件。这是添加子项的首选方式,因为它会创建适当的事件。

例如:

((DefaultTreeModel) tree.getModel()).insertNodeInto(newNode, root, 0);//inserts at beginning
//((DefaultTreeModel) tree.getModel()).insertNodeInto(newNode, root, root.getChildCount() - 1);//inserts at end

【讨论】:

  • 我尝试了这种方法,但无济于事。这棵树是否可能需要重新粉刷或重新验证?
  • 应该没有必要。你能发布一个MCVE 来证明这不起作用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2011-03-28
  • 2018-02-06
  • 2012-12-22
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
相关资源
最近更新 更多