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