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