Java JTree节点标签经常更改,但会缓存宽度

Java JTree节点标签经常更改,但会缓存宽度,java,swing,jtree,Java,Swing,Jtree,目前,我正在使用自定义TreeCellRenderer来处理我的JTree的标签和图标更改。当我需要更改几个节点上的文本时,问题就出现了。TreeCellRenderer在显示新文本方面工作得很好。但是,初始文本的宽度是缓存的,不会更新。我试图通过在TreeCellRenderer中重写getPreferredSize来破解它,但由于我有html字符串,因此无法正常工作。我甚至尝试过解析标签并获得宽度,但它仍然不完美。我使用了SwingUtilities和FontMetrics 似乎使用树的支持

目前,我正在使用自定义TreeCellRenderer来处理我的JTree的标签和图标更改。当我需要更改几个节点上的文本时,问题就出现了。TreeCellRenderer在显示新文本方面工作得很好。但是,初始文本的宽度是缓存的,不会更新。我试图通过在TreeCellRenderer中重写getPreferredSize来破解它,但由于我有html字符串,因此无法正常工作。我甚至尝试过解析标签并获得宽度,但它仍然不完美。我使用了SwingUtilities和FontMetrics


似乎使用树的支持DefaultTreeModel.nodeChanged(TreeNode)是更改节点的正确方法。但是,我需要一个额外的数据结构来处理访问需要更改的节点。就个人而言,我只想更改需要更改的节点。但是,这需要另一个数据结构来查找所有需要更新的节点。在这种情况下,备份JLabel的大小缓存的最佳方式是什么?

我发现使用您建议的调用nodeChanged的方式对我最为有效。

我能够通过JTree解决这个问题。setLargeModel(true)文档说这会禁用很多缓存。但它也警告说,并非所有UI都支持它。我只是在几个LnF以及Linux和Windows上尝试过。我觉得还可以。有什么想法吗?