1

DefaultTreeModel中,您可以使用方法插入节点insertNodeInto()。但是,我注意到也存在nodesWereInserted()具有这个非常简洁的 Javadoc 的方法:

将一些 TreeNode 插入节点后调用此方法。

我觉得很奇怪这是一种公共方法。我希望如果它向听众触发 ChangeEvents,它应该是一个由insertNodeInto(). 似乎调用一个方法来通知另一个方法调用的更改与 Java Swing 的设计方式有些不一致(我elementIsInserted()在向 JComboBox 添加元素时不调用方法)。

nodesWereInserted()但是我发现在我的代码中,如果我调用after并不重要insertNodeInto()。无论哪种方式,结果都与添加到树并在 GUI 中显示的节点相同。

那么有人可以解释一下是否有必要nodesWereInserted()在 DefaultTreeModel 中调用和类似方法吗?如果是这样,为什么?它有什么insertNodeInto()自己做不到的?

4

3 回答 3

1

想象一下,您的 TreeModel 使用一棵独立的真实树,并且一些节点是由不知道模型存在的单独进程插入的。或者两个 TreeModel 使用相同的对象树(节点)。该过程只是将子节点添加到某些节点。或者您在第一个模型中插入节点但还必须更新第二个模型。

然后你应该以某种方式更新模型。在这种情况下,您使用nodesWereInserted()并且需要从模型外部调用公共方法。

当然,如果你insertNodeInto()nodesWereInserted()里面调用

于 2013-12-20T06:29:27.683 回答
1

你不需要自己调用它。正如 EJP 所说,每次插入节点时都会调用它。您可以在派生类中重写此函数,以便在插入节点时收到信号。

如果您没有自己的派生类,但是您只需添加一个 TreeModellistener。

于 2013-12-20T06:32:22.763 回答
0

我们可以有自己的自定义树节点,它正在做一些处理。(假设我们要检查新节点是否有资格被插入。)我们使用该DefaultMutableTreeNode.insert() 方法向这个自定义树节点添加一个新子节点。此时,我们需要通过调用DefaultTreeModel.nodesWereInserted()方法通知模型插入。如果修改太复杂,可能需要调用该DefaultTreeModel.reload()方法。如果我们在自己的树节点中没有任何自定义处理,那么我们可以通过调用添加一个新节点DefaultTreeModel.insertNodeInto()

于 2014-05-31T10:19:20.520 回答