在DefaultTreeModel中,可以使用insertNodeInto()方法插入节点。但是,我注意到还有一个nodesWereInserted()方法,它具有非常简洁的Javadoc:
在将一些TreeNodes插入节点后调用此方法。
我觉得很奇怪,这是一种公开的方法。我预计,如果要向侦听器发送ChangeEvents,那么它应该是insertNodeInto()调用的私有方法。似乎调用一个方法来通知另一个方法调用的更改与Java的设计方式有些不一致(我在向elementIsInserted()添加元素时不调用JComboBox方法)。
但是我发现在我的代码中,如果我在insertNodeInto()之后调用insertNodeInto()并不重要。无论哪种方式,结果都是相同的,节点被添加到树中并显示在GUI中。
那么,请有人解释一下,是否有必要在DefaultTreeModel中调用DefaultTreeModel和类似的方法?如果是,为什么?insertNodeInto()自己不能做的事情是什么呢?
发布于 2013-12-20 06:32:22
你不需要自己管它。正如EJP所说,每次插入节点时都会调用它。可以在派生类中重写此函数,以便在插入节点时获得信号。
如果您没有自己的派生classHowever,只需添加一个TreeModellistener即可。
发布于 2013-12-20 06:29:27
假设您的TreeModel使用独立的真实树,并且一些节点是通过单独的进程插入的,而这些进程并不知道存在的模型。或者两个TreeModels使用相同的对象树(节点)。这个过程只是将子节点添加到一些节点中。或者您在第一个模型中插入节点,但也必须更新第二个模型。
那么您应该以某种方式更新模型。在本例中,您使用nodesWereInserted(),需要从模型外部调用公共方法。
如果你调用insertNodeInto(),nodesWereInserted()在里面被调用
发布于 2014-05-31 10:19:20
我们可以有自己的自定义树节点,它正在进行一些处理。(假设我们要检查新节点是否符合插入条件。)我们使用DefaultMutableTreeNode.insert()方法向这个自定义树节点添加一个新的子节点。此时,我们需要通过调用DefaultTreeModel.nodesWereInserted()方法将插入通知模型。如果修改太复杂,则可能需要调用DefaultTreeModel.reload()方法。如果我们在自己的树节点中没有任何自定义处理,那么我们可以通过调用DefaultTreeModel.insertNodeInto()来添加一个新节点。
https://stackoverflow.com/questions/20697402
复制相似问题