我遇到了与Canvas上调用的Control.redraw(int, int, int, int, boolean)
方法相关的以下问题。我正在使用图表编辑器。最近我实施了选择工具。它在图上显示了一个矩形框。问题是,当我借助鼠标快速调整此选择工具的大小时,我在屏幕上出现了文物。但是当我慢慢调整工具大小时,一切都正确地重新绘制。
在SWT语言中,它看起来如下。
每次使用鼠标调整选择矩形的大小时,我最终调用redraw
方法指定要重绘的相应矩形区域。然后我抓住PaintEvent
并绘制框架。如果鼠标移动缓慢,一切都按预期工作。
问题是SWT可以跳过绘画事件还是跳过重绘命令?是否有人遇到类似的问题?也许,是否应该设置一些标志?
所以,我尝试setRedraw(true)
,但它没有产生任何效果。最后,我尝试用redraw(int, int, int, int, boolean)
替换redraw()
方法,并且工件消失但这不是可接受的解决方案,因为它在调整选择工具的大小时创建了合理的滞后,尤其是在Windows上。
由于
答案 0 :(得分:1)
如果您询问是否每次调用重绘都与paint事件匹配,那么答案是否定的。操作系统可能会决定将多个重绘请求合并到一个绘制事件中(尽管如此,它应覆盖所有原始请求的区域)。请注意,可以使用update()
方法触发绘制请求 - redraw()
将使区域无效并将其标记为重绘,但不会显式触发重绘。
操作系统可能在重绘时遇到一些问题,但问题在于您的绘图代码/重绘算法更有可能。