Eliminating Flashing
The flashing that you might have noticed
in the example on the previous page
is a common problem with animation
(and occasionally with static graphics).
Flashing is generally more noticeable on PCs
than on X Windows-based systems,
since X graphics are buffered
(which makes the flash shorter).
The flashing effect is the result of two facts:
- By default, the background of the animation is cleared
(its whole area redrawn in the background color)
before the
paint() method is called.
- The computation in the previous example's
paint() method
is complex enough that it takes longer to compute and draw
each frame of animation
than the video screen's refresh rate.
As a result, the first part of the frame
is drawn on one video refresh pass,
and the rest of the frame is drawn
on the next (or even the pass after that).
The result is that
although the first part of the frame is animated smoothly (usually),
you can see a break between the first and second parts,
since the second part is blank until the second pass.
You can use two techniques to eliminate flashing:
overriding the update() method
and implementing double buffering.
Overriding the update() Method
To eliminate flashing, whether or not you use double buffering,
you must override the update() method.
This is necessary because it's the only way
to prevent the entire background of the Component
from being cleared just before the Component is drawn.
Implementing Double Buffering
Double buffering involves performing multiple graphics operations
on an undisplayed graphics buffer,
and then displaying the resulting image onscreen.
Besides preventing incomplete images from being drawn to the screen,
double buffering can improve drawing performance
because drawing to an offscreen image
is more efficient than drawing to the screen.