Java - 更新JTree

3
我有一个JTree,用于显示一些(不出所料)分层数据。规格的一部分是用户可以更改数据源(目前仅在文件之间)。现在,当这种情况发生时,我可以重新构建数据和树节点,没有问题。但是,我很难让树更新更改。我尝试将其从滚动窗格中删除并替换为新的JTree,但我没有看到任何效果。我尝试删除所有JTree内容也没有效果。
如何使JTree在构造后显示更改? 注:我确实调用了updateUI()。
另一个编辑: 我还想用我的新数据替换树的当前数据。但是,我没有看到可以使用我构建的DefaultMutableTreeNode的方法。即使我只删除JTree并在其包含的ScrollPane上调用updateUI,什么也没有发生。或者如果我使用repaint也是如此。

你是如何创建JTree的? - Alex B
通过构建节点,然后直接从它们创建JTree。 - Puppy
1
updateUI() 用于动态更改外观和感觉,与重新绘制组件无关。 - fasseg
1个回答

5
可能是适当的事件(JTree内部事件)没有被触发。例如,您可以通过使用node.add(...)甚至更好的方法model.insertNodeInto(...)(假设您正在使用DefaultTreeModel)来添加节点。在这种情况下,如果使用后者方法,它将触发适当的事件,使视图(JTree)正确更新。您的问题可能不在于重新绘制UI,而是通知视图模型已更改。
因此,我建议您查看如何动态修改JTree,如果可能,建议使用DefaultTreeModel作为驱动视图的模型。
只是为了确保,您已阅读了Sun JTree教程,对吗?

事实证明,defaultTreeModel 包含了我所需的所有函数。JTree 没有提供任何有用的方法来获取它们。一旦我从模型中创建了 JTree 并获取了模型,一切都变得容易了。 - Puppy
太棒了!以模型驱动的方式工作是值得的。 - Nate W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接