1、执行时机:
update() 只是将一个 paintEvent 事件添加到事件队列中,等待稍后执行。它不会立即执行 paintEvent。
repaint() 则会立即执行 paintEvent,而不会等待事件队列的处理。
2、重绘区域:
update() 会合并多个重绘请求,只在最后执行一次 paintEvent。这可以减少不必要的重绘操作,提高性能。
repaint() 则会立即执行 paintEvent,不会进行任何合并操作。这意味着每次调用 repaint() 都会触发一次 paintEvent。
3、同步性:
update() 是异步的,它只是将重绘事件添加到事件队列,不会立即执行。
repaint() 是同步的,它会立即执行 paintEvent,阻塞直到重绘完成。
4、场景:
update() 通常用于在不重要的时候触发重绘,比如用户交互、动画等。
repaint() 更适用于需要立即反馈的场景,比如需要在 paintEvent 中计算和显示一些重要的信息。
总的来说:
- update() 是一种异步、高性能的重绘方式,适用于大多数场景。
- repaint() 是一种同步、低性能的重绘方式,适用于需要立即反馈的场景。
在实际开发中,我们通常会优先使用 update()。只有在特殊情况下,比如需要立即反馈的场景,我们才会选择使用 repaint()。