在DefaultTreeModel中,您可以使用insertNodeInto()
方法插入节点。但是,我注意到还存在nodesWereInserted()
方法,它具有非常简洁的Javadoc:
在将一些TreeNode插入节点后调用此方法。
我发现这是一种公共方法很奇怪。我希望如果要将ChangeEvents发送给监听器,它应该是insertNodeInto()
调用的私有方法。看起来调用一个方法来通知另一个方法调用的更改与Java Swing的设计方式有些不一致(当我向JComboBox添加一个元素时,我没有调用elementIsInserted()
方法)。
但我发现在我的代码中,如果我在nodesWereInserted()
之后调用insertNodeInto()
并不重要。无论哪种方式,结果都会与添加到树中并在GUI中显示的节点相同。
那么有人可以解释一下是否有必要在DefaultTreeModel中调用nodesWereInserted()
和类似的方法?如果是这样,为什么? insertNodeInto()
不能单独做什么?
答案 0 :(得分:1)
想象一下,你的TreeModel使用一个独立的真实树,一些节点是由不知道现有模型的单独进程插入的。或者两个TreeModel使用相同的对象树(节点)。 该过程只是将子节点添加到某些节点。或者您在第一个模型中插入节点,但也必须更新第二个模型。
然后你应该以某种方式更新模型。在这种情况下,您使用nodesWereInserted()
,并且需要从模型外部调用公共方法。
如果你打电话给insertNodeInto()
,nodesWereInserted()
会在里面调用
答案 1 :(得分:1)
您不需要自己打电话。正如EJP所说,每次插入节点时都会调用它。 您可以在派生类中覆盖此函数,以便在插入节点时发出信号。
如果您没有自己的派生类,则只需添加TreeModellistener即可。
答案 2 :(得分:0)
我们可以拥有自己的自定义树节点,正在进行一些处理。 (假设我们要检查新节点是否有资格插入。)
我们使用DefaultMutableTreeNode.insert()
向此自定义树节点添加一个新子节点
方法。此时,我们需要通知模型有关插入的信息
调用DefaultTreeModel.nodesWereInserted()
方法。如果修改过于复杂,则可能需要调用DefaultTreeModel.reload()
方法。
如果我们自己的树节点中没有任何自定义处理,那么我们
可以通过调用DefaultTreeModel.insertNodeInto()
来添加新节点。