我每秒收到数百个事件,持续几秒钟,每个事件都会更新我的模型。如果我在每个事件之后在invokeLater()内部调用repaint(),每秒是否会重涂数百次?是否足够聪明地意识到它具有500个备份的repaint(),而只需要执行1个?我不知道事件何时会暂停,但是我只想以合理的速度更新UI。我可以实现一个不断更新的未来,直到有足够长的暂停(例如500毫秒)为止,但是如果java已经这样做了,那我为什么要这样做?
documentation是很好的信息来源。
来自repaint()
的javadoc:
注:有关AWT和Swing利用的绘制机制的更多信息,包括有关如何编写最有效的绘制代码的信息,请参见
repaint()
。
程序在组件上调用Painting in AWT and Swing,该组件向AWT注册需要重新粉刷此组件的asynchronous请求。
AWT使事件分配线程在组件上调用
repaint()
。NOTE:如果在处理初始重绘请求之前在组件上发生了对
update()
的多次调用,则[多个请求可能会折叠]成为对repaint()
的单个调用。确定何时应折叠多个请求的算法取决于实现。如果多个请求被折叠,则生成的更新矩形将等于折叠的请求中包含的矩形的并集。