2010-08-11 50 views
3

我有一个JTree,我用它来显示一些(不出意外的)分层数据。部分规范是用户可以更改数据源(atm只是在文件之间)。现在,当发生这种情况时,我可以毫无问题地重建数据和树节点。但是,我在获取树更新更改方面遇到很多困难。我试图从它的scrollpane中删除它,并用新的JTree替换,但我没有看到任何这样的。我尝试从JTree中删除所有内容,但没有看到任何效果。Java-更新JTree

如何在构建JTree后显示更改? Ninjedit:是的,我确实调用了updateUI()。

另一编辑: 我也想用我的新数据替换树的当前数据。但是,我没有看到任何方法将采用我构建的DefaultMutableTreeNode。即使我只是删除JTree并调用它包含ScrollPane的updateUI,也没有任何反应。或者如果我使用重绘。

+0

你是怎么创建JTree的? – 2010-08-11 16:00:07

+0

通过构建节点,然后直接从它们创建JTree。 – Puppy 2010-08-11 16:02:55

+1

updateUI()用于即时更改外观并与重新绘制组件无关。 – fasseg 2010-08-11 16:11:33

回答

5

这可能是正确的事件(JTree内部事件)没有被解雇。例如,您可以使用node.add(...)或更好的model.insertNodeInto(...)(假设您使用的是DefaultTreeModel)来添加节点。在这种情况下,后一种方法是首选,因为它会触发适当的事件,导致视图(JTree)正确更新。您的问题可能不是重新绘制UI,而是实际上通知视图模型已更改。
所以,我建议你看看你是如何动态修改你的JTree的,如果可能的话,我建议使用DefaultTreeModel作为你的模型来驱动视图。

而只是为了确保您已阅读the Sun JTree tutorials,对不对?

+0

原来,defaultTreeModel包含我需要的所有功能。 JTree没有提供任何有用的方法来获取它们。一旦我从模型中创建JTree并抓取模型,一切都很简单。 – Puppy 2010-08-13 16:14:18

+0

优秀!支付模型驱动是值得的。 – 2010-08-13 16:40:06