在我正在开发的 Swing 应用程序中进行重新绘制时,我遇到了一些奇怪的问题。我发现当我设置某个组件的文本(它只是窗口最底部的状态栏文本标签)时,屏幕非常不同区域的整个表格被告知重新绘制。这会导致一些性能问题,因为每次我设置状态栏文本时,基本上整个窗口都被要求重新绘制。
我一直在 RepaintManager 周围徘徊,试图弄清楚发生了什么,并发现当我尝试设置此文本的标签时,我的整个主 JPanel 都被标记为脏组件。但是,我在调试发生的时间点以及发生这种情况的确切原因时遇到了麻烦。我试图阅读重绘系统,但我无法确定为什么在设置其他文本标签时需要对非重叠表进行重绘。
我使用 Swing Explorer 尝试可视化布局边框,以确保事物不会以某种疯狂的方式重叠,并且一切看起来都很好。
我正在寻找一种方法来确定要求 JTable 重新绘制的调用顺序。当我在它的paintComponent() 上添加一个断点并沿着堆栈向上走时,我最终进入了RepaintManager 的paintDirtyRegions() 调用,其中我的整个主JPanel(包含窗口中的所有内容)都位于tmpDirtyComponents 变量中。
当我最初只是设置一个状态文本标签时,谁能解释我的整个 JPanel 是如何被标记为脏的?如果没有,您能否提供一些关于在哪里找到错误的指导?
非常感谢您提供的任何帮助!