Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javagui中更新JTree_Java_Jtree - Fatal编程技术网

在javagui中更新JTree

在javagui中更新JTree,java,jtree,Java,Jtree,我在GUI中使用了JTree并将其添加到JFrame中。当我想在程序的另一部分更新和更改它的节点时(当程序运行时,作为执行的操作),我会尝试添加新节点,或删除节点;但是我的界面没有改变。请给我一个解决方案 关于您需要确保在更新您的模型后,您指示它触发一个事件,以使任何注册的侦听器收到该事件的通知。其中一个侦听器将是JTree,收到事件后,它将重新绘制 例如,包含以下方法: 此外,与所有Swing编程一样,除了insertNodeInto建议之外,您还需要确保在事件调度线程上更新您的模型 De

我在GUI中使用了JTree并将其添加到JFrame中。当我想在程序的另一部分更新和更改它的节点时(当程序运行时,作为执行的操作),我会尝试添加新节点,或删除节点;但是我的界面没有改变。请给我一个解决方案


关于

您需要确保在更新您的模型后,您指示它触发一个事件,以使任何注册的侦听器收到该事件的通知。其中一个侦听器将是
JTree
,收到事件后,它将重新绘制

例如,包含以下方法:


此外,与所有Swing编程一样,除了insertNodeInto建议之外,您还需要确保在事件调度线程上更新您的模型

DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot();
root.add(new DefaultMutableTreeNode("another_child"));
model.reload(root);

您的意思是GUI方面没有显示您的更改吗?您可能应该查看int
repaint()
revalidate()。


很好地描述了何时调用哪一个。

您不必自己触发这些事件。例如,您所要做的就是通过调用
insertNodeInto
方法来更新模型,并让模型负责向TreeModelListeners触发事件。这一点很好,尽管在某些情况下,最好自己管理它。例如,如果我想添加1000个子节点,我不希望触发1000个“添加节点”事件。谢谢先生!但是你提到的这些方法是私有的,无法访问。你说得绝对正确!我已经改变了我的答案,以反映您应该调用的正确的公共方法。因此,感谢您有价值的回答!每次我想更新我的树时,我都会使用这种方法。这种方法很有效,但在处理大型树时是一种“暴力”方法。例如,如果我要循环并将1000个节点添加到一个已经包含50000个项目的树中,这将是非常低效的。在野外,树多长时间会变得足够大,以至于变得足够慢而令人担忧?是的,调用此方法是必要的。-1,不需要重新绘制()和重新验证()。当您自定义模型时,模型负责通知视图更改,以便树可以重新绘制自己。