【问题标题】:Java Swing. How to detect that other component/window moved above my component?爪哇摇摆。如何检测其他组件/窗口在我的组件上方移动?
【发布时间】:2014-03-28 18:53:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: java swing window listener repaint


    【解决方案1】:

    我想检测这种情况,

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

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

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

    【讨论】:

    • 谢谢,我已经尝试过WindowsListener,但它没有提供所需的回调。
    【解决方案2】:

    与其自己跟踪脏区,不如重写paintComponent() 方法,并在Graphics 对象上使用getClipBounds() 方法,它会通知您需要重新绘制Component 的哪个区域?

    【讨论】:

    • getClipBounds() 方法返回组件的边界。它不知道该组件被另一个窗口部分覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多