似乎跳过SWT重绘命令会导致屏幕上出现伪影

时间:2012-01-25 10:59:10

标签: java swt

我遇到了与Canvas上调用的Control.redraw(int, int, int, int, boolean)方法相关的以下问题。我正在使用图表编辑器。最近我实施了选择工具。它在图上显示了一个矩形框。问题是,当我借助鼠标快速调整此选择工具的大小时,我在屏幕上出现了文物。但是当我慢慢调整工具大小时,一切都正确地重新绘制。

在SWT语言中,它看起来如下。

每次使用鼠标调整选择矩形的大小时,我最终调用redraw方法指定要重绘的相应矩形区域。然后我抓住PaintEvent并绘制框架。如果鼠标移动缓慢,一切都按预期工作。

问题是SWT可以跳过绘画事件还是跳过重绘命令?是否有人遇到类似的问题?也许,是否应该设置一些标志?

所以,我尝试setRedraw(true),但它没有产生任何效果。最后,我尝试用redraw(int, int, int, int, boolean)替换redraw()方法,并且工件消失但这不是可接受的解决方案,因为它在调整选择工具的大小时创建了合理的滞后,尤其是在Windows上。

由于

1 个答案:

答案 0 :(得分:1)

如果您询问是否每次调用重绘都与paint事件匹配,那么答案是否定的。操作系统可能会决定将多个重绘请求合并到一个绘制事件中(尽管如此,它应覆盖所有原始请求的区域)。请注意,可以使用update()方法触发绘制请求 - redraw()将使区域无效并将其标记为重绘,但不会显式触发重绘。

操作系统可能在重绘时遇到一些问题,但问题在于您的绘图代码/重绘算法更有可能。