Source of MultipleFaces.java


  1: import javafx.application.Application;
  2: import javafx.scene.canvas.Canvas;
  3: import javafx.scene.Scene;
  4: import javafx.scene.Group;
  5: import javafx.stage.Stage;
  6: import javafx.scene.canvas.GraphicsContext;
  7: import javafx.scene.shape.ArcType;
  8: import javafx.scene.paint.Color;
  9: import javafx.scene.text.Font;
 10: 
 11: public class MultipleFaces extends Application
 12: {
 13:     public static final int WINDOW_WIDTH = 450;
 14:     public static final int WINDOW_HEIGHT = 300;
 15: 
 16:     public static final int FACE_DIAMETER = 50;
 17:     public static final int X_FACE0 = 10;
 18:     public static final int Y_FACE0 = 5;
 19: 
 20:     public static final int EYE_WIDTH = 5;
 21:     public static final int EYE_HEIGHT = 10;
 22:     public static final int X_RIGHT_EYE0 = 20;
 23:     public static final int Y_RIGHT_EYE0 = 15;
 24:     public static final int X_LEFT_EYE0 = 45;
 25:     public static final int Y_LEFT_EYE0 = Y_RIGHT_EYE0;
 26: 
 27:     public static final int NOSE_DIAMETER = 5;
 28:     public static final int X_NOSE0 = 32;
 29:     public static final int Y_NOSE0 = 25;
 30: 
 31:     public static final int MOUTH_WIDTH = 30;
 32:     public static final int MOUTH_HEIGHT0 = 0;
 33:     public static final int X_MOUTH0 = 20;
 34:     public static final int Y_MOUTH0 = 35;
 35:     public static final int MOUTH_START_ANGLE = 180;
 36:     public static final int MOUTH_EXTENT_ANGLE = 180;
 37: 
 38:    public static void main(String[] args)
 39:    {
 40:       launch(args);
 41:    }
 42: 
 43:    @Override
 44:    public void start(Stage primaryStage) throws Exception
 45:    {
 46:           Group root = new Group();
 47:              Scene scene = new Scene(root);
 48: 
 49:       Canvas canvas = new Canvas(WINDOW_WIDTH, WINDOW_HEIGHT);
 50:       GraphicsContext gc = canvas.getGraphicsContext2D();
 51: 
 52:           int i, xOffset, yOffset; //Want i to exist after the loop ends
 53: 
 54:           for (i = 0; i <= 4; i++)
 55:             {//Draw one face:
 56:                   xOffset = 50 * i;
 57:                   yOffset = 30 * i;
 58: 
 59:                   //Draw face circle:
 60:                   if (i % 2 == 0)//if i is even
 61:                   {//Make face light gray
 62:                           gc.setFill(Color.LIGHTGRAY);
 63:                         gc.fillOval(X_FACE0 + xOffset, Y_FACE0 + 30 * i,
 64:                                         FACE_DIAMETER, FACE_DIAMETER);
 65:                   }
 66:                   gc.setFill(Color.BLACK);
 67:                   gc.strokeOval(X_FACE0 + xOffset, Y_FACE0 + yOffset,
 68:                                         FACE_DIAMETER, FACE_DIAMETER);
 69:                   //Draw eyes:
 70:                   gc.setFill(Color.BLACK);
 71:                   gc.fillOval(X_RIGHT_EYE0 + xOffset, Y_RIGHT_EYE0 + yOffset,
 72:                                    EYE_WIDTH, EYE_HEIGHT);
 73:                   gc.fillOval(X_LEFT_EYE0 + xOffset, Y_LEFT_EYE0 + yOffset,
 74:                                    EYE_WIDTH, EYE_HEIGHT);
 75:                   //Draw nose:
 76:                   gc.setFill(Color.BLACK);
 77:                   gc.fillOval(X_NOSE0 + xOffset, Y_NOSE0 + yOffset,
 78:                                    NOSE_DIAMETER, NOSE_DIAMETER);
 79:                   //Draw mouth:
 80:                   gc.setFill(Color.BLACK);
 81:                   gc.strokeArc(X_MOUTH0 + xOffset, Y_MOUTH0 + yOffset,
 82:                                    MOUTH_WIDTH, MOUTH_HEIGHT0 + 3 * i + 1,
 83:                                    MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE,
 84:                                    ArcType.OPEN);
 85:           }
 86:           //i is 5 when the previous loop ends
 87:           xOffset = 50 * i;
 88:           yOffset = 30 * i;
 89: 
 90:           //Draw kissing face:
 91:           //Draw face circle:
 92:           gc.setFill(Color.BLACK);
 93:           gc.strokeOval(X_FACE0 + xOffset, Y_FACE0 + yOffset,
 94:                                 FACE_DIAMETER, FACE_DIAMETER);
 95:           //Draw eyes:
 96:           gc.setFill(Color.BLACK);
 97:           gc.fillOval(X_RIGHT_EYE0 + xOffset, Y_RIGHT_EYE0 + yOffset,
 98:                                 EYE_WIDTH, EYE_HEIGHT);
 99:           gc.fillOval(X_LEFT_EYE0 + xOffset, Y_LEFT_EYE0 + yOffset,
100:                                   EYE_WIDTH, EYE_HEIGHT);
101:           //Draw nose:
102:           gc.setFill(Color.BLACK);
103:           gc.fillOval(X_NOSE0 + xOffset, Y_NOSE0 + yOffset,
104:                                 NOSE_DIAMETER, NOSE_DIAMETER);
105:           //Draw mouth in shape of a kiss:
106:           gc.setFill(Color.BLACK);
107:           gc.fillOval(X_MOUTH0 + xOffset + 10, Y_MOUTH0 + yOffset,
108:                                 MOUTH_WIDTH - 20, MOUTH_WIDTH - 20);
109:           //Add text in Times New Roman, 12 point:
110:           gc.setFont(Font.font("Times New Roman", 12));
111:           gc.fillText("Kiss, Kiss.",
112:                         X_FACE0 + xOffset + FACE_DIAMETER, Y_FACE0 + yOffset);
113: 
114: 
115:           //Draw blushing face:
116:           i++;
117:           xOffset = 50 * i;
118:           yOffset = 30 * i;
119: 
120:           //Draw face circle:
121:           gc.setFill(Color.GRAY);
122:           gc.fillOval(X_FACE0 + xOffset, Y_FACE0 + yOffset,
123:                                   FACE_DIAMETER, FACE_DIAMETER);
124:           gc.setFill(Color.BLACK);
125:           gc.strokeOval(X_FACE0 + xOffset, Y_FACE0 + yOffset,
126:                                 FACE_DIAMETER, FACE_DIAMETER);
127:           //Draw eyes:
128:           gc.setFill(Color.BLACK);
129:           gc.fillOval(X_RIGHT_EYE0 + xOffset, Y_RIGHT_EYE0 + yOffset,
130:                                 EYE_WIDTH, EYE_HEIGHT);
131:           gc.fillOval(X_LEFT_EYE0 + xOffset, Y_LEFT_EYE0 + yOffset,
132:                                   EYE_WIDTH, EYE_HEIGHT);
133:           //Draw nose:
134:           gc.setFill(Color.BLACK);
135:           gc.fillOval(X_NOSE0 + xOffset, Y_NOSE0 + yOffset,
136:                                  NOSE_DIAMETER, NOSE_DIAMETER);
137:           //Draw mouth:
138:           gc.setFill(Color.BLACK);
139:           gc.strokeArc(X_MOUTH0 + xOffset, Y_MOUTH0 + yOffset, MOUTH_WIDTH,
140:                            MOUTH_HEIGHT0 + 3 * (i - 2),
141:                            MOUTH_START_ANGLE, MOUTH_EXTENT_ANGLE, ArcType.OPEN);
142:           //Add text in Courier New Font, 16 point:
143:           gc.setFont(Font.font("Courier New ", 16));
144:           gc.fillText("Tee Hee.",
145:                           X_FACE0 + xOffset + FACE_DIAMETER, Y_FACE0 + yOffset);
146: 
147:       root.getChildren().add(canvas);
148:       primaryStage.setTitle("MultipleFaces in JavaFX");
149:       primaryStage.setScene(scene);
150:       primaryStage.show();
151:    }
152: }
153: 
154: