我有一个Java程序可视化快速变化的数据。我安排javax.swing.Timer
并每50毫秒调用repaint()
。但这需要大量的CPU。因此,我开始记录脏区域(数据在50毫秒内实际发生了变化),然后调用repaint(x, y, w, h);
,其中参数标识需要重新绘制的脏区域。这解决了CPU问题,但当另一个窗口/组件悬停在该组件上时会导致一些故障。
我想检测这种情况,并为整个组件调用repaint()
。有没有办法检测它?
(我没有附上SSCCE,因为我认为这是一个已知问题,因为从我的代码中分离它并不容易。但如果需要,我可以这样做。)
答案 0 :(得分:1)
我想检测这种情况,
我不知道有任何方法来检测正在覆盖的帧的哪个区域。
并为整个组件调用repaint()。有没有办法检测它?
也许您可以使用WindowListener
并处理windowDeactivated()
事件。当窗口没有焦点时,很可能会在其上显示其他窗口。
答案 1 :(得分:1)
如果不是自己跟踪脏区,请覆盖paintComponent()
方法,并在getClipBounds()
对象上使用Graphics
方法,该方法会通知您{{1}的哪个区域你需要重画吗?