Source of MultipleFaces.java


  1: //MultipleFaces.java

  3: import javax.swing.JApplet;
  4: import java.awt.Graphics;
  5: import java.awt.Color;

  7: public class MultipleFaces extends JApplet
  8: {
  9:     public static final int FACE_DIAMETER = 50;
 10:     public static final int X_FACE0 = 10;
 11:     public static final int Y_FACE0 = 5;

 13:     public static final int EYE_WIDTH = 5;
 14:     public static final int EYE_HEIGHT = 10;
 15:     public static final int X_RIGHT_EYE0 = 20;
 16:     public static final int Y_RIGHT_EYE0 = 15;
 17:     public static final int X_LEFT_EYE0 = 45;
 18:     public static final int Y_LEFT_EYE0 = Y_RIGHT_EYE0;

 20:     public static final int NOSE_DIAMETER = 5;
 21:     public static final int X_NOSE0 = 32;
 22:     public static final int Y_NOSE0 = 25;

 24:     public static final int MOUTH_WIDTH = 30;
 25:     public static final int MOUTH_HEIGHT0 = 0;
 26:     public static final int X_MOUTH0 = 20;
 27:     public static final int Y_MOUTH0 = 35;
 28:     public static final int MOUTH_START_ANGLE = 180;
 29:     public static final int MOUTH_EXTENT_ANGLE = 180;

 31:     /**
 32:      * g is the drawing area. pos is a parameter for the position of the face.
 33:      * As pos increases, the face is drawn lower and further to the right.
 34:     */
 35:     private void drawFaceSansMouth
 36:     (
 37:         Graphics g,
 38:         int pos
 39:     )
 40:     {
 41:         g.setColor(Color.BLACK);
 42:         g.drawOval(X_FACE0 + 50 * pos, Y_FACE0 + 30 * pos,
 43:             FACE_DIAMETER, FACE_DIAMETER);
 44:         //Draw eyes:
 45:         g.setColor(Color.BLUE);
 46:         g.fillOval(X_RIGHT_EYE0 + 50 * pos, Y_RIGHT_EYE0 + 30 * pos,
 47:             EYE_WIDTH, EYE_HEIGHT);
 48:         g.fillOval(X_LEFT_EYE0 + 50 * pos, Y_LEFT_EYE0 + 30 * pos,
 49:             EYE_WIDTH, EYE_HEIGHT);
 50:         //Draw nose:
 51:         g.setColor(Color.BLACK);
 52:         g.fillOval(X_NOSE0 + 50 * pos, Y_NOSE0 + 30 * pos,
 53:             NOSE_DIAMETER, NOSE_DIAMETER);
 54:     }

 56:     public void paint
 57:     (
 58:         Graphics canvas
 59:     )
 60:     {
 61:         int i;
 62:         for (i = 0; i < 5; i++)
 63:         {//Draw one face:
 64:             if (i % 2 == 0)//If i is even,
 65:             {   //make face yellow
 66:                 canvas.setColor(Color.YELLOW);
 67:                 canvas.fillOval(X_FACE0 + 50 * i, Y_FACE0 + 30 * i,
 68:                     FACE_DIAMETER, FACE_DIAMETER);
 69:             }
 70:             drawFaceSansMouth(canvas, i);
 71:             //Draw mouth:
 72:             canvas.setColor(Color.RED);
 73:             canvas.drawArc(X_MOUTH0 + 50 * i, Y_MOUTH0 + 30 * i,
 74:                 MOUTH_WIDTH, MOUTH_HEIGHT0 + 3 * i,
 75:                 MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE);
 76:         }
 77:         //i == 5

 79:         //Draw kissing face:
 80:         drawFaceSansMouth(canvas, i);
 81:         //Draw mouth in shape of a kiss:
 82:         canvas.setColor(Color.RED);
 83:         canvas.fillOval(X_MOUTH0 + 50 * i + 10, Y_MOUTH0 + 30 * i,
 84:             MOUTH_WIDTH - 20, MOUTH_WIDTH - 20);
 85:         //Add text:
 86:         canvas.setColor(Color.BLACK);
 87:         canvas.drawString("Kiss, Kiss.",
 88:             X_FACE0 + 50 * i + FACE_DIAMETER, Y_FACE0 + 30 * i);

 90:         //Draw blushing face:
 91:         i++;
 92:         //Draw face circle:
 93:         canvas.setColor(Color.PINK);
 94:         canvas.fillOval(X_FACE0 + 50 * i, Y_FACE0 + 30 * i,
 95:             FACE_DIAMETER, FACE_DIAMETER);
 96:         drawFaceSansMouth(canvas, i);
 97:         //Draw mouth:
 98:         canvas.setColor(Color.RED);
 99:         canvas.drawArc(X_MOUTH0 + 50 * i, Y_MOUTH0 + 30 * i, MOUTH_WIDTH,
100:             MOUTH_HEIGHT0 + 3 * (i - 2),
101:             MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE);
102:         //Add text:
103:         canvas.setColor(Color.BLACK);
104:         canvas.drawString("Tee Hee.",
105:             X_FACE0 + 50 * i + FACE_DIAMETER, Y_FACE0 + 30 * i);
106:     }
107: }