# Java: Example - Drawing a Face

This simple application creates a graphic component to display a face. It uses a `JPanel` and overrides the `paintComponent` method to do the drawing.

      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
     47
     48
     49
     50
     51
     52
    // Face.java - shows how to create a graphics component.
    // Fred Swartz 1996 ... 2002-10-24

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

    ////////////////////////////////////////////////////////////////// Face
    public class Face {
        // =========================================================== main
        public static void main(String[] args) {
            JFrame windo = new FaceWindow();
            windo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            windo.setVisible(true);
        }//end main
    }//end class Face

    //////////////////////////////////////////////////////////// FaceWindow
    class FaceWindow extends JFrame {
        // ==================================================== constructor
        FaceWindow() {
            Container content = this.getContentPane();  // get content pane
            content.setLayout(new BorderLayout());      // set its layout
            PacLady drawing = new PacLady();            // Create a PacLady
            content.add(drawing, BorderLayout.CENTER);  // center expands

            this.setTitle("Ms Paclady");
            this.pack();             // finalize window layout
        }//end constructor
    }//endclass FaceWindow

    /////////////////////////////////////////////////////// class PacLady
        // This class extends JPanel and overrides paintComponent to
        // create a component for drawing - in this case a face.
    class PacLady extends JPanel {
        // ================================================== constructor
        PacLady() {
            this.setBackground(Color.lightGray);
            this.setPreferredSize(new Dimension(400, 400));  // size
        }//end constructor

        //================================================ paintComponent
        public void paintComponent(Graphics g) {
            // This method is called to redraw window
            super.paintComponent(g);  // MUST be first line
            //--- Draw the head with open mouth and 8 pixel border
            g.setColor(Color.pink);
            g.fillArc(8, 8, 384, 384, 30, 300);
            //--- Draw the eye
            g.setColor(Color.magenta);
            g.fillOval(230, 72, 60, 60);
        }//end paintComponent
    }//endclass PacLady

## Possible exensions

1. When the window is resized, the PacLady JPanel will also be resized. The drawing should be changed. Use

           int w = this.getWidth();
           int h = this.getHeight();

   near the beginning of `paintComponent` to find the width and height of the panel. Use these values so that the face expands and contracts more appropriately.
2. Add a button that changes the expression when it is clicked. For example, it could change the face from happy to sad and vice versa.