Java 树选择颜色

Java 树选择颜色,java,swing,selection,jtree,Java,Swing,Selection,Jtree,我正在应用程序中使用JTree。如果我在大多数情况下选择叶节点,它们将以蓝色背景显示(这很好)。但由于某些原因,在某些情况下,它们不会得到蓝色背景(尽管选择此叶节点的事件处理是有效的)。我不知道这里有什么问题。。。如果在选择之后展开或折叠分支节点(分支节点前面有一个小图标),则选择将可见。我被这种行为弄糊涂了。 知道从哪里开始深入研究这个问题吗?JTree使用BasicTreeUI(除非您更改了L&F),后者反过来将使用DefaultTreeCellRenderer。如果您查看方法gettree

我正在应用程序中使用JTree。如果我在大多数情况下选择叶节点,它们将以蓝色背景显示(这很好)。但由于某些原因,在某些情况下,它们不会得到蓝色背景(尽管选择此叶节点的事件处理是有效的)。我不知道这里有什么问题。。。如果在选择之后展开或折叠分支节点(分支节点前面有一个小图标),则选择将可见。我被这种行为弄糊涂了。
知道从哪里开始深入研究这个问题吗?

JTree使用
BasicTreeUI
(除非您更改了L&F),后者反过来将使用
DefaultTreeCellRenderer
。如果您查看方法
gettreecellrendercomponent
,这可能会对您有所帮助。如果很容易复制此问题,那么对此方法进行一些调试可能会揭示原因。

听起来像是一个bug—很可能是在代码中。第一个猜测是重绘问题,即无论出于何种原因都不会触发重绘。若要检查该假设,请在某个位置添加一个按钮,以强制重新绘制,而无需执行任何其他操作。下一次出现问题时,按下按钮-如果什么也没有发生,您必须查看其他地方:节点实际上没有被选中,选择逻辑有问题。如果现在绘制正确,那么在某个地方会有一个通知问题-节点已被选中,但状态更改没有传递给TreeThaks,这需要很多提示!我在选择侦听器“valueChanged”的末尾调用了repaint方法,并意识到由于一些叶节点引发了RuntimeException,因此从未到达该方法的末尾。处理异常反而解决了问题。嗯,现在我无法将此问题标记为已解决,因为我不允许回答自己的问题…我已覆盖单元渲染器,它在“Metal”L&F上运行良好,但在GTK+上,它看起来除了使用另一个渲染器外还使用了我的渲染器,而且它的行为很奇怪。有没有办法防止L&F影响?