我编写了一个自定义组件,该组件扩展了JPanel并覆盖了其paint()方法。现在,我看到在显示组件时,此方法每10毫秒调用一次。组件中没有任何变化,但仍调用paint()。我有几个调用repaint(),但实际上没有一个调用。如何知道导致如此频繁更新的原因?
更新! 我的代码中有“ bug”。我正在通过paint()方法更新内部组件,因此这是连续重新绘制的根本原因。 但是,问题仍然没有得到答案:如何理解什么将事件提供给队列?
答案 0 :(得分:0)
使用调试 在paint()函数中创建一个断点 当它调用时,您可以查看回调的堆栈跟踪
答案 1 :(得分:0)
如何了解什么将事件提供给队列?
只要更改了Swing组件的属性,该组件都会自动对其自身调用repaint()
。绘制请求将传递到RepaintManager
。
然后RepaintManager
会将多个重新绘制请求合并到所有组件的单个绘制中。进行合并以提高绘画效率。
因此发出请求的单个组件不可用,因为在许多情况下,多个组件会同时发出重新绘制请求。
您可以阅读Painting in AWT and Swing以获得更详细的说明。