Graphics Shape Demo

/* ShapeDemo.java
* 
* This displays a framed area containing one of 
* each shape you can draw.
*
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ShapeDemo extends JPanel {
    int maxCharHeight = 48;
    final static int minFontSize = 6;
    final static Color bg = Color.lightGray;
    final static Color fg = Color.black;

    Dimension totalSize;
    FontMetrics fontMetrics;

    FontMetrics pickFont(Graphics g,
                         String longString,
                         int xSpace) {
        boolean fontFits = false;
        Font font = g.getFont();
        FontMetrics fontMetrics = g.getFontMetrics();
		int height = fontMetrics.getHeight();
		if (height>maxCharHeight) maxCharHeight = height;

        int size = font.getSize();
        String name = font.getName();
        int style = font.getStyle();

        while (!fontFits) {
            if ( (fontMetrics.getHeight() <= maxCharHeight)
              && (fontMetrics.stringWidth(longString) 
		  <= xSpace)) {
                fontFits = true;
            } else {
                if (size <= minFontSize) {
                    fontFits = true;
                } else {
                    g.setFont(font = new Font(name,
                                              style,
                                              --size));
                    fontMetrics = g.getFontMetrics();
                }
            }
        }

        return fontMetrics;
    }

	public void drawBorder(Graphics g, int x, int y, int width, int height)
	{
		Color c = g.getColor();
		Color fg3D = Color.lightGray;

		g.setColor(fg3D);
		g.draw3DRect(x, y, width - 1, height - 1, true);
		g.draw3DRect(x+3, y+3, width - 7, height - 7, false);
		g.setColor(c);
	}

    public void paint(Graphics g) {
		super.paint(g);
        Dimension d = getSize();
        int gridWidth = d.width / 7;
        int gridHeight = d.height / 2;

        if ( (totalSize == null)
          || (totalSize.width != d.width)
          || (totalSize.height != d.height) ) {
            totalSize = d;
            fontMetrics = pickFont(g, "drawRoundRect",
                                   gridWidth);
        }

        Color fg3D = Color.lightGray;

		drawBorder(g,0,0,d.width,d.height);

        int x = 5;
        int y = 7;
        int rectWidth = gridWidth - 2*x;
        int stringY = gridHeight - 5 - 
		      fontMetrics.getDescent();
        int rectHeight = stringY - fontMetrics.getMaxAscent()
                         - y - 2;

        // drawLine(x1, y1, x2, y2) 
        g.drawLine(x, y+rectHeight-1, x + rectWidth, y);
        g.drawString("drawLine", x, stringY);
        x += gridWidth;

        // drawRect(x, y, w, h) 
        g.drawRect(x, y, rectWidth, rectHeight);
        g.drawString("drawRect", x, stringY);
        x += gridWidth;

        // draw3DRect(x, y, w, h, raised) 
        g.setColor(fg3D);
        g.draw3DRect(x, y, rectWidth, rectHeight, true);
        g.setColor(fg);
        g.drawString("draw3DRect", x, stringY);
        x += gridWidth;

        // drawRoundRect(x, y, w, h, arcw, arch) 
        g.drawRoundRect(x, y, rectWidth, rectHeight, 10, 10);
        g.drawString("drawRoundRect", x, stringY);
        x += gridWidth;

        // drawOval(x, y, w, h) 
        g.drawOval(x, y, rectWidth, rectHeight);
        g.drawString("drawOval", x, stringY);
        x += gridWidth;

        // drawArc(x, y, w, h) 
        g.drawArc(x, y, rectWidth, rectHeight, 90, 135);
        g.drawString("drawArc", x, stringY);
        x += gridWidth;

        // drawPolygon(xPoints, yPoints, numPoints) 
        int x1Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y1Points[] = {y, y+rectHeight, y+rectHeight, y};
        g.drawPolygon(x1Points, y1Points, x1Points.length); 
        g.drawString("drawPolygon", x, stringY);

        // NEW ROW
        x = 5;
        y += gridHeight;
        stringY += gridHeight;

        // drawPolyline(xPoints, yPoints, numPoints) 
        // Note: drawPolygon would close the polygon.
        int x2Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y2Points[] = {y, y+rectHeight, y+rectHeight, y};
        g.drawPolyline(x2Points, y2Points, x2Points.length); 
        g.drawString("drawPolyline", x, stringY);
        x += gridWidth;

        // fillRect(x, y, w, h)
        g.fillRect(x, y, rectWidth, rectHeight);
        g.drawString("fillRect", x, stringY);
        x += gridWidth;

        // fill3DRect(x, y, w, h, raised) 
        g.setColor(fg3D);
        g.fill3DRect(x, y, rectWidth, rectHeight, true);
        g.setColor(fg);
        g.drawString("fill3DRect", x, stringY);
        x += gridWidth;

        // fillRoundRect(x, y, w, h, arcw, arch)
        g.fillRoundRect(x, y, rectWidth, rectHeight, 10, 10);
        g.drawString("fillRoundRect", x, stringY);
        x += gridWidth;

        // fillOval(x, y, w, h)
        g.fillOval(x, y, rectWidth, rectHeight);
        g.drawString("fillOval", x, stringY);
        x += gridWidth;

        // fillArc(x, y, w, h)
        g.fillArc(x, y, rectWidth, rectHeight, 90, 135);
        g.drawString("fillArc", x, stringY);
        x += gridWidth;

        // fillPolygon(xPoints, yPoints, numPoints) 
        int x3Points[] = {x, x+rectWidth, x, x+rectWidth};
        int y3Points[] = {y, y+rectHeight, y+rectHeight, y};
        g.fillPolygon(x3Points, y3Points, x3Points.length); 
        g.drawString("fillPolygon", x, stringY);
    }
	
	public static void main( String args[] )
	{
		JFrame frame = new JFrame("ShapeDemo");
		JPanel panel = new ShapeDemo();

		frame.setSize( 560, 180 );
		Container c = frame.getContentPane();
		c.add(panel);
		frame.show();

		frame.addWindowListener(
			new WindowAdapter() {
				public void windowClosing( WindowEvent e )
				{
					System.exit( 0 );
				}
			}
		);
	}
}

Border3D Demo

/* Border3D.java
* 
* This displays a framed area 
*
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Border3D extends JPanel {
    final static Color bg = Color.lightGray;
    final static Color fg = Color.black;

	public void drawBorder(Graphics g, int x, int y, int width, int height)
	{
		Color c = g.getColor();
		Color fg3D = Color.lightGray;

		g.setColor(fg3D);
		g.draw3DRect(x, y, width - 1, height - 1, true);
		g.draw3DRect(x+3, y+3, width - 7, height - 7, false);
		g.setColor(c);
	}
		

    public void paint(Graphics g) {
		super.paint(g);
        Dimension d = getSize();

		drawBorder(g,d.width/4,d.height/4,d.width/2,d.height/2);

     }
	
	public static void main( String args[] )
	{
		JFrame frame = new JFrame("Border Demo");
		JPanel panel = new Border3D();

		frame.setSize( 300, 90 );
		Container c = frame.getContentPane();
		c.add(panel);
		frame.show();

		frame.addWindowListener(
			new WindowAdapter() {
				public void windowClosing( WindowEvent e )
				{
					System.exit( 0 );
				}
			}
		);
	}
}


Maintained by John Loomis, last updated 1 June 2000