【发布时间】:2011-04-18 19:38:16
【问题描述】:
我在我的 GUI 中使用了 JTree 并将其添加到 JFrame。当我想更新它并在程序的另一部分更改它的节点时(在程序运行时,作为执行的操作),我尝试添加新节点或删除节点;但是我的界面没有改变。请给我一个解决方案。
问候
【问题讨论】:
我在我的 GUI 中使用了 JTree 并将其添加到 JFrame。当我想更新它并在程序的另一部分更改它的节点时(在程序运行时,作为执行的操作),我尝试添加新节点或删除节点;但是我的界面没有改变。请给我一个解决方案。
问候
【问题讨论】:
您需要确保在更新模型后指示它触发一个事件,以使所有已注册的侦听器都收到该事件的通知。其中一位听众是JTree,在收到事件后它将重新绘制。
例如,DefaultTreeModel 包含方法:
nodeChanged
nodesChanged
nodeStructureChanged
nodesWereInserted
nodesWereRemoved
此外,与所有 Swing 编程一样,您需要确保在 Event Dispatch Thread 上更新模型。
【讨论】:
insertNodeInto 方法来更新模型,例如,让模型负责向 TreeModelListeners 触发事件。
您的意思是 GUI 方面只是没有显示您的更改吗?你可能应该看看 int repaint() 和 revalidate().
Here's 很好地描述了何时调用哪个。
【讨论】:
除了 insertNodeInto 建议,您还可以使用:
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot();
root.add(new DefaultMutableTreeNode("another_child"));
model.reload(root);
【讨论】: