Java Swing。如何检测其他组件/窗口移动到我的组件上方?

时间:2014-03-28 18:53:01

标签: java swing window listener repaint

我有一个Java程序可视化快速变化的数据。我安排javax.swing.Timer并每50毫秒调用repaint()。但这需要大量的CPU。因此,我开始记录脏区域(数据在50毫秒内实际发生了变化),然后调用repaint(x, y, w, h);,其中参数标识需要重新绘制的脏区域。这解决了CPU问题,但当另一个窗口/组件悬停在该组件上时会导致一些故障。

我想检测这种情况,并为整个组件调用repaint()。有没有办法检测它?

(我没有附上SSCCE,因为我认为这是一个已知问题,因为从我的代码中分离它并不容易。但如果需要,我可以这样做。)

2 个答案:

答案 0 :(得分:1)

  

我想检测这种情况,

我不知道有任何方法来检测正在覆盖的帧的哪个区域。

  

并为整个组件调用repaint()。有没有办法检测它?

也许您可以使用WindowListener并处理windowDeactivated()事件。当窗口没有焦点时,很可能会在其上显示其他窗口。

答案 1 :(得分:1)

如果不是自己跟踪脏区,请覆盖paintComponent()方法,并在getClipBounds()对象上使用Graphics方法,该方法会通知您{{1}的哪个区域你需要重画吗?