/*
* Copyright (c) 2004 David Flanagan. All rights reserved.
* This code is from the book Java Examples in a Nutshell, 3nd Edition.
* It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
* You may study, use, and modify it for any non-commercial purpose,
* including teaching and use in open-source projects.
* You may distribute it non-commercially as long as you retain this notice.
* For a commercial use license, or to purchase the book,
* please visit http://www.davidflanagan.com/javaexamples3.
*/
package je3.graphics;
import java.applet.*;
import java.awt.*;
/** An applet that demonstrates the Color class */
public class ColorGradient extends Applet {
Color startColor, endColor; // Start and end color of the gradient
Font bigFont; // A font we'll use
/**
* Get the gradient start and end colors as applet parameter values, and
* parse them using Color.decode(). If they are malformed, use white.
**/
public void init() {
try {
startColor = Color.decode(getParameter("startColor"));
endColor = Color.decode(getParameter("endColor"));
}
catch (NumberFormatException e) {
startColor = endColor = Color.white;
}
bigFont = new Font("Helvetica", Font.BOLD, 72);
}
/** Draw the applet. The interesting code is in fillGradient() below */
public void paint(Graphics g) {
fillGradient(this, g, startColor, endColor); // display the gradient
g.setFont(bigFont); // set a font
g.setColor(new Color(100, 100, 200)); // light blue
g.drawString("Colors!", 100, 100); // draw something interesting
}
/**
* Draw a color gradient from the top of the specified component to the
* bottom. Start with the start color and change smoothly to the end
**/
public void fillGradient(Component c, Graphics g, Color start, Color end) {
Rectangle bounds = this.getBounds(); // How big is the component?
// Get the red, green, and blue components of the start and end
// colors as floats between 0.0 and 1.0. Note that the Color class
// also works with int values between 0 and 255
float r1 = start.getRed()/255.0f;
float g1 = start.getGreen()/255.0f;
float b1 = start.getBlue()/255.0f;
float r2 = end.getRed()/255.0f;
float g2 = end.getGreen()/255.0f;
float b2 = end.getBlue()/255.0f;
// Figure out how much each component should change at each y value
float dr = (r2-r1)/bounds.height;
float dg = (g2-g1)/bounds.height;
float db = (b2-b1)/bounds.height;
// Now loop once for each row of pixels in the component
for(int y = 0; y < bounds.height; y++) {
g.setColor(new Color(r1, g1, b1)); // Set the color of the row
g.drawLine(0, y, bounds.width-1, y); // Draw the row
r1 += dr; g1 += dg; b1 += db; // Increment color components
}
}
}
|