LineStyles.java

See Test5.java for main program.


LineStyles.java


import java.awt.*;
import java.awt.geom.*;

/** A demonstration of Java2D line styles */
public class LineStyles implements GraphicsExample {
    public String getName() { return "LineStyles"; }  // From GraphicsExample
    public int getWidth() { return 460; }             // From GraphicsExample
    public int getHeight() { return 220; }            // From GraphicsExample

    int[] xpoints = new int[] { 0, 50, 100 };  // X coordinates of our shape
    int[] ypoints = new int[] { 75, 0, 75 };   // Y coordinates of our shape

    // Here are three different line styles we will demonstrate
    // They are thick lines with different cap and join styles
    Stroke[] linestyles = new Stroke[] {
	new BasicStroke(25.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL),
	new BasicStroke(25.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER),
	new BasicStroke(25.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND),
    };
    
    // Another line style: a 2 pixel-wide dot-dashed line
    Stroke thindashed = new BasicStroke(2.0f,  // line width
	/* cap style */			BasicStroke.CAP_BUTT,
	/* join style, miter limit */	BasicStroke.JOIN_BEVEL, 1.0f,
        /* the dash pattern */	        new float[] {8.0f, 3.0f, 2.0f, 3.0f},
	/* the dash phase */		0.0f);   /* on 8, off 3, on 2, off 3 */

    // Labels to appear in the diagram, and the font to use to display them.
    Font font = new Font("Helvetica", Font.BOLD, 12);
    String[] capNames = new String[] {"CAP_BUTT", "CAP_SQUARE","CAP_ROUND"};
    String[] joinNames = new String[] {"JOIN_BEVEL","JOIN_MITER","JOIN_ROUND"};

    /** This method draws the example figure */
    public void draw(Graphics2D g, Component c) {
	// Use anti-aliasing to avoid "jaggies" in the lines
	g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
			   RenderingHints.VALUE_ANTIALIAS_ON);

	// Define the shape to draw
	GeneralPath shape = new GeneralPath();
	shape.moveTo(xpoints[0], ypoints[0]);   // start at point 0
	shape.lineTo(xpoints[1], ypoints[1]);   // draw a line to point 1
	shape.lineTo(xpoints[2], ypoints[2]);   // and then on to point 2

	// Move the origin to the right and down, creating a margin
	g.translate(20,40);

	// Now loop, drawing our shape with the three different line styles
	for(int i = 0; i < linestyles.length; i++) {
	    g.setColor(Color.gray);       // Draw a gray line
	    g.setStroke(linestyles[i]);   // Select the line style to use
	    g.draw(shape);                // Draw the shape

	    g.setColor(Color.black);      // Now use black
	    g.setStroke(thindashed);      // And the thin dashed line
	    g.draw(shape);                // And draw the shape again.

	    // Highlight the location of the vertexes of the shape
	    // This accentuates the cap and join styles we're demonstrating
	    for(int j = 0; j < xpoints.length; j++) 
		g.fillRect(xpoints[j]-2, ypoints[j]-2, 5, 5);

	    g.drawString(capNames[i], 5, 105);   // Label the cap style
	    g.drawString(joinNames[i], 5, 120);  // Label the join style

	    g.translate(150, 0); // Move over to the right before looping again
	}
    }
}

/*
 * 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.
 */


Maintained by John Loomis, updated Tue Feb 04 18:17:33 2020