如何确保每个paint()调用在监视器上真正可见

时间:2016-05-31 09:12:37

标签: java paint monitor

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

提前感谢任何提示, 安迪

2 个答案:

答案 0 :(得分:1)

在绘制之后,你必须在组件上调用revalidate。然后更改才会生效。

答案 1 :(得分:0)

我们可以在注释中看到documentation on painting

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. 

因此,即使您按正确的顺序调用重绘并且全部被绘制,也可能会发生多个绘制事件在一个中折叠。

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