Java是否将多个repaint()调用合并为一个repaint()?

问题描述 投票:0回答:1

我每秒收到数百个事件,持续几秒钟,每个事件都会更新我的模型。如果我在每个事件之后在invokeLater()内部调用repaint(),每秒是否会重涂数百次?是否足够聪明地意识到它具有500个备份的repaint(),而只需要执行1个?我不知道事件何时会暂停,但是我只想以合理的速度更新UI。我可以实现一个不断更新的未来,直到有足够长的暂停(例如500毫秒)为止,但是如果java已经这样做了,那我为什么要这样做?

java timer repaint invokelater
1个回答
0
投票

documentation是很好的信息来源。

来自repaint()的javadoc:

注:有关AWT和Swing利用的绘制机制的更多信息,包括有关如何编写最有效的绘制代码的信息,请参见repaint()

来自Painting in AWT and Swing

程序在组件上调用Painting in AWT and Swing,该组件向AWT注册需要重新粉刷此组件的asynchronous请求。

AWT使事件分配线程在组件上调用repaint()

NOTE:如果在处理初始重绘请求之前在组件上发生了对update()的多次调用,则[多个请求可能会折叠]成为对repaint()的单个调用。确定何时应折叠多个请求的算法取决于实现。如果多个请求被折叠,则生成的更新矩形将等于折叠的请求中包含的矩形的并集。

© www.soinside.com 2019 - 2024. All rights reserved.