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