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

Java Swing。如何检测移动到我的组件上方的其他组件/窗口?,java,swing,window,listener,repaint,Java,Swing,Window,Listener,Repaint,我有一个Java程序,可以可视化快速变化的数据。我计划javax.swing.Timer并每隔50毫秒调用repaint()。但这需要大量的CPU。因此,我开始记录脏区(数据在50毫秒内实际发生了变化),然后调用repaint(x,y,w,h),其中参数标识需要重新绘制的脏区域。这解决了CPU问题,但当另一个窗口/组件悬停在该组件上时会导致一些小故障 我想检测这种情况,并为整个组件调用repaint()。有没有办法检测到它 (我不附加SSCCE,因为我假设这是一个已知的问题,并且因为它不容易从我

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

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

(我不附加SSCCE,因为我假设这是一个已知的问题,并且因为它不容易从我的代码中分离出来。但是如果需要,我可以这样做)

我想侦破这类案件

我不知道有什么方法可以检测出框架的哪个区域被覆盖了

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


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

与其自己跟踪脏区域,不如覆盖
paintComponent()
方法,然后使用
getClipBounds()
图形
对象上的
方法,该方法将通知您需要重新绘制
组件
的哪个区域?

getClipBounds()方法返回组件的边界。它不知道该组件被另一个窗口部分覆盖。谢谢,我已经尝试了
WindowsListener
,但它没有提供所需的回调。