
Build a Colorful Vector-Based Button #62
Chapter 8, Rendering
|
315
HACK
g2.drawRoundRect(
(int)x, (int)y,
(int)w, (int)h,
(int)ax, (int)ay
);
}
Finally, you may have noticed the
pressed
boolean in
drawLiquidButton( )
.
JButton provides a way of knowing when the button has been selected, but
there is no way to know when it is pressed or released during the clicking
process. Most applications have no need for this information, but because
this hack involves rendering changes, you’ll need to know the pressed state
in order to draw the button properly. Since
JButton
doesn’t tell you the cur-
rent state, you have to detect it with a mouse listener that looks for press
and release events:
/* mouse listener implementation */
protected boolean pressed = false;
public void mouseExited(MouseEvent evt) { }
public void mouseEntered(MouseEvent evt) { }
public void mouseClicked(MouseEvent evt) { }
public void mouseReleased(MouseEvent evt) {
pressed = false;
}
public void mousePressed(MouseEvent evt) {
pressed = true;
}
Hacking the Hack
The VectorButton takes an awful lot of drawing code. This isn’t so much
because it scales, but simply because recreating the work of Apple’s talented
graphic designers with Swing code is difficult. One possible improvement
would be to use SVG files instead of direct Java2D code. This would let you
develop the actual look of the button in a graphics program instead of the
slow code/compile/run ...