O'Reilly logo

Swing Hacks by Chris Adamson, Joshua Marinacci

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 cycle we are all used to as programmers. It would
also let you pass the work on to a real graphic designer while you focus on
speed and functionality.
VectorButton shows the potential of vector-based interfaces, but it’s just the
tip of the iceberg. Imagine if you had an entire Look and Feel based on vec-
tors, where all the buttons scaled according to the font size. Then you could
change the font size to scale the entire application—while it’s running! You
could even do proper DPI calculations based on the physical size and shape
of the user’s screen to make your application look identical on any device,
scaling from PDAs all the way up to high resolution HDTVs.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required