Java Reference
In-Depth Information
Display 18.16
paintComponent
Demonstration
(part 2 of 2)
R
ESULTING
GUI
The program in Display 18.17 has a private instance variable
wink
of type
boolean
.
When the value of
wink
is
false
, the
paint
method draws an ordinary happy face.
When the value of
wink
is
true
, the
paint
method draws the face the same except that
the left eye is just a straight line, which looks like the eye is closed. The variable
wink
is
initialized to
false
.
When the button labeled
Click for a Wink
is clicked, this sends an action event
to the method
actionPerformed
. The method
actionPerformed
then changes the
value of the variable
wink
to
true
and invokes the method
repaint
. This use of the
method
repaint
is new, so let us discuss it a bit.
Every
JFrame
(in fact, every
Component
and every
Container
) has a method
named
repaint
. The method
repaint
will repaint the screen so that any changes
to the graphics being displayed will show on the screen. If you omit the invocation
of
repaint
from the method
actionPerformed
, then the variable
wink
will change
to
true
, but the screen will not change. Without an invocation of
repaint
, the face
will not change, because the method
paint
must be called again with the new value of
wink
before the change takes effect. The method
repaint
does a few standard things
and, most importantly, will also invoke the method
paint
, which redraws the screen.
Be sure to note that you should invoke
repaint
and not
paint
.
Now we explain why, when
wink
has the value
true
, the method
paint
draws the
face with the left eye changed. The relevant part of the code is the following, which
draws the left eye:
repaint
if
(wink)
g.drawLine(X_LEFT_EYE, Y_LEFT_EYE,
X_LEFT_EYE + EYE_WIDTH, Y_LEFT_EYE);
else
g.fillOval(X_LEFT_EYE, Y_LEFT_EYE, EYE_WIDTH, EYE_HEIGHT);