如何检查谁在Swing中提交repaint()事件?

时间:2018-10-02 08:02:46

标签: java swing awt

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

更新! 我的代码中有“ bug”。我正在通过paint()方法更新内部组件,因此这是连续重新绘制的根本原因。 但是,问题仍然没有得到答案:如何理解什么将事件提供给队列?

2 个答案:

答案 0 :(得分:0)

使用调试 在paint()函数中创建一个断点 当它调用时,您可以查看回调的堆栈跟踪

答案 1 :(得分:0)

  

如何了解什么将事件提供给队列?

只要更改了Swing组件的属性,该组件都会自动对其自身调用repaint()。绘制请求将传递到RepaintManager

然后RepaintManager会将多个重新绘制请求合并到所有组件的单个绘制中。进行合并以提高绘画效率。

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

您可以阅读Painting in AWT and Swing以获得更详细的说明。