首页 > 解决方案 > 如何在 Swing 中检查谁提交了 repaint() 事件?

问题描述

我编写了一个自定义组件,它扩展了 JPanel 并覆盖了它的 paint() 方法。现在我可以看到该方法在组件显示时每 10 毫秒调用一次。组件中没有任何变化,但仍然调用paint()。我有几个调用 repaint() 但实际上没有一个调用。如何知道是什么导致了如此频繁的更新?

更新! 我的代码中有“错误”。我正在从 paint() 方法更新内部组件,因此这是持续重绘的根本原因。但是仍然没有回答这个问题:如何理解是什么向队列提供事件?

标签: javaswingawt

解决方案


如何理解是什么向队列提供事件?

每当 Swing 组件的属性发生更改时,该组件将自动repaint()对其自身进行调用。绘制请求被传递给RepaintManager.

然后RepaintManager将多个重绘请求合并到所有组件的单个绘画中。合并是为了使绘画更有效率。

因此发出请求的单个组件不可用,因为在许多情况下,多个组件会同时发出重绘请求。

您可以阅读AWT 和 Swing中的绘画以获得更详细的说明。


推荐阅读