gpt4 book ai didi

java - 如何调试 Swing 中发生的不必要的重绘

转载 作者:行者123 更新时间:2023-11-29 06:15:07 25 4
gpt4 key购买 nike

在我正在开发的 Swing 应用程序中进行重绘时,我遇到了一些奇怪的问题。我发现当我设置某个组件的文本时(它只是窗口最底部的状态栏文本标签),屏幕上非常不同的区域中的整个表格被告知要重新绘制。它会导致一些性能问题,因为每次我设置状态栏文本时,基本上整个窗口都被要求重新绘制。

我一直在 RepaintManager 周围徘徊,试图弄清楚发生了什么,并发现当我尝试设置此文本的标签时,我的整个主要 JPanel 都被标记为脏组件。但是,我在调试发生的什么时候以及它发生的确切原因时遇到了问题。我尝试阅读重绘系统,但我无法确定为什么在设置其他文本标签时非重叠表需要重绘。

我已经使用 Swing Explorer 尝试可视化布局边​​界,以确保事物不会以某种疯狂的方式重叠,并且一切看起来都很好。

我正在寻找一种方法来确定要求 JTable 重绘的调用序列。当我在它的 paintComponent() 上添加一个断点并沿着堆栈向上移动时,我最终进入了 RepaintManager 的 paintDirtyRegions() 调用,其中我的整个主要 JPanel(包含窗口中的所有内容)都位于 tmpDirtyComponents 变量中。

当我最初只是设置一个状态文本标签时,有人能解释一下我的整个 JPanel 是如何被标记为脏的吗?如果没有,您能否提供一些关于在何处挂接以查找错误的指导?

非常感谢您提供的任何帮助!

最佳答案

每当您更改 Swing 组件的属性时,都会在组件上调用 revalidate() 和 repaint()。设置文本会导致组件的首选大小发生变化,因此需要调用布局管理器并重新绘制整个面板。

我不确定如何解决这个问题。

关于java - 如何调试 Swing 中发生的不必要的重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5373037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com