FileDocCategorySizeDatePackage
Stroking.javaAPI DocExample3060Sat Jan 24 10:44:36 GMT 2004je3.graphics

Stroking.java

/*
 * 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.awt.*;
import java.awt.geom.*;

/** A demonstration of how Stroke objects work */
public class Stroking implements GraphicsExample {
    static final int WIDTH = 725, HEIGHT = 250;  // Size of our example
    public String getName() {return "Stroking";} // From GraphicsExample
    public int getWidth() { return WIDTH; }      // From GraphicsExample
    public int getHeight() { return HEIGHT; }    // From GraphicsExample

    /** Draw the example */
    public void draw(Graphics2D g, Component c) {
	// Create the shape we'll work with.  See convenience method below.
	Shape pentagon = createRegularPolygon(5, 75);

	// Set up basic drawing attributes
	g.setColor(Color.black);                          // Draw in black
	g.setStroke(new BasicStroke(1.0f));               // Use thin lines
	g.setFont(new Font("SansSerif", Font.PLAIN, 12)); // Basic small font

	g.translate(100, 100);                        // Move to position
	g.draw(pentagon);                             // Outline the shape
	g.drawString("The shape", -30, 90);           // Draw the caption

	g.translate(175, 0);                          // Move over
	g.fill(pentagon);                             // Fill the shape
	g.drawString("The filled shape", -50, 90);    // Another caption

	// Now use a Stroke object to create a "stroked shape" for our shape
	BasicStroke wideline = new BasicStroke(10.0f);
	Shape outline = wideline.createStrokedShape(pentagon);

	g.translate(175, 0);                          // Move over
	g.draw(outline);                              // Draw the stroked shape
	g.drawString("A Stroke creates",-50,90);      // Draw the caption
	g.drawString("a new shape", -35, 105);

	g.translate(175,0);                           // Move over
	g.fill(outline);                              // Fill the stroked shape
	g.drawString("Filling the new shape",-65,90); // Draw the caption
	g.drawString("outlines the old one",-65,105);
    }

    // A convenience method to define a regular polygon.
    // Returns a shape that represents a regular polygon with the specified
    // radius and number of sides, and centered at the origin.
    public Shape createRegularPolygon(int numsides, int radius) {
	Polygon p = new Polygon();               
	double angle = 2 * Math.PI / numsides;   // Angle between vertices
	for(int i = 0; i < numsides; i++)  // Compute location of each vertex
	    p.addPoint((int)(radius * Math.sin(angle*i)),
		       (int)(radius * -Math.cos(angle*i)));
	return p;  
    }
}