如何确保每个paint()调用在监视器上都是可见的



我对paint()-方法有一个相当奇怪的问题:我正在删除一些具有可视化图像堆栈的部分的应用程序。您可以使用键盘和鼠标在堆栈中导航以查看每个图像。一个要求是,即使你在堆栈中快速导航,你也应该能够真正看到每一张图像。为了证明我在paint()方法中添加了一些日志输出,以查看显示的图像,一切似乎都很好。然后,我用监视器上的(软件)视频采集器以足够的帧速率捕捉到了一个快速导航,可以在录制的视频中看到一些图像被跳过(视频中显示的每个图像总是包含几帧)。我测试了其他一些视频抓取器,得到了同样的结果。在我看来,即使实际上对每个图像都调用了paint()-方法,监视器输出也会跳过其中的一些图像。我该如何避免这种情况?我希望你能理解我的问题,对于这个应用程序来说,这是一个真正的问题。

提前感谢您的任何提示,Andy

绘制后,您必须对组件调用revalidate。然后更改将生效。

查看绘画文档,我们可以在注释中看到:

NOTE: If multiple calls to repaint() occur on a component before 
the initial repaint request is processed, the multiple requests may 
be collapsed into a single call to update(). The algorithm for
determining when multiple requests should be collapsed is 
implementation-dependent. If multiple requests are collapsed, the 
resulting update rectangle will be equal to the union of the rectangles 
contained in the collapsed requests. 

因此,即使您按正确的顺序调用repaint并绘制了所有绘制,也可能会发生多个绘制事件在一个绘制事件中塌陷的情况。

似乎您已经采取了措施,当我正确阅读该文档时,您必须在repaint()调用之后显式地update()组件。

最新更新