“AWT和Swing中的绘画”文档陈述如下。
“如果在处理初始重绘请求之前在组件上发生多次调用repaint(),则多个请求可能会折叠为一次调用update()。”
是否可以在组件中更改此行为,以便多次调用重绘永远不会折叠为单个调用?
编辑:文档进一步说明了这一点,“用于确定何时应该折叠多个请求的算法取决于实现。”
我的问题是我在移动平台上执行单独调用重绘,并且我正在尝试复制桌面上的行为。
答案 0 :(得分:0)
我担心绘制算法在swing / awt中非常硬编码,并且它们仅为不同目的提供不同的钩子。你可以在swing中使用this方法来提供你想要的东西,但遗憾的是似乎没有相同的awt。你可以尝试混合awt / swing,但这通常不推荐,在某些情况下可能会导致奇怪的行为,因为我听到了
PS:对于那些问你为什么要这样的人:一些应用程序(主要是游戏)需要同步重绘以确保它们的视觉外观与内部状态保持一致 - 例如,JScrollbar也在内部使用它(例如我的避风港)我看了一下有问题的代码,所以请稍等一下 - 我确实理解为什么它在那种特殊情况下有用呢)答案 1 :(得分:0)
我猜你有一些长时间运行的任务正在循环不按预期更新GUI。这是因为你阻止了事件调度线程,因此Swing无法重新绘制自己。
阅读Concurrency in Swing上的Swing教程中的部分。使用SwingWorker进行长时间运行的任务,你不要阻止EDT,然后你可以发布结果和必需的,它们将按预期绘制。
或者,如果您对动画有疑问,请使用Swing Timer。本教程还有一个关于计时器的部分。