Java: Example - Drawing a Face - v4

Instance variables representing the state

This Face class is essentially the same are the previous example, but instance variables are used to represent some of the important characteristics of the drawing. These could be declared as constants (static final), but we're going to change them in the next example.

Main is the same as previous version.

Face with instance variables

  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
// File: face/file2/Face.java 
// Author: Fred Swartz,  Date: July 1998 ... Oct 2004

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

//////////////////////////////////////////////////////////////// class Face
class Face extends JPanel {
    //... Instance variables that define the "state" of the face.
    int mouthAngle   = 60;  // Number of degrees open the mouth is.
    int eyeDiameter  = 20;  // Size of the eye.
    int headDiameter = 200; // Size of the head.

    /** Constructor sets background color and initial size. */
    public Face() {
        this.setPreferredSize(new Dimension(300, 300));
        this.setBackground(Color.GRAY);
    }

    /** Override paintComponent to draw a face */
    public void paintComponent(Graphics g) {
        super.paintComponent(g);   // Required as first line.
        
        //... Get panel width and height, Compute center.
        int w = this.getWidth();
        int h = this.getHeight();
        int centerX = w / 2;  // x-coordinate of the center.
        int centerY = h / 2;  // y-coordinate of the center.
        
        //... Draw vertical lines in the background.
        g.setColor(Color.LIGHT_GRAY);
        for (int x=0; x < w; x += 10) {
            g.drawLine(x, 0, x, h);
        }

        //... Draw everything except the mouth in pink
        g.setColor(Color.PINK);
        g.fillArc(centerX - headDiameter / 2, centerY - headDiameter / 2
                 , headDiameter, headDiameter
                 , mouthAngle / 2, 360 - mouthAngle);

        //... Draw an eye
        g.setColor(Color.MAGENTA);
        g.fillOval(centerX + 20, centerY - 60, eyeDiameter, eyeDiameter);
    }
}