Java: Example - Drawing a Face v2

This simple application creates a graphic component to display a face. It subclasses 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 
/** Face.java - Example app with graphics component.
  @author Fred Swartz 
  @version 1996 ... 2002-10-24
*/

import javax.swing.*;

////////////////////////////////////////////////////////////////// Face
public class Face {
    // =========================================================== main
    public static void main(String[] args) {
        JFrame window = new FaceWindow();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
    }//end main
}//end class Face
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
/** FaceWindow.java - Window (JFrame) containing only one component.
  @author Fred Swartz 
  @version 1996 ... 2002-10-24
*/

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

//////////////////////////////////////////////////////////// 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 
  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 
/** PacLady.java - Graphical component extending JPanel.
  @author Fred Swartz 
  @version 1996 ... 2002-10-24
*/

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

///////////////////////////////////////////////////////// class PacLady
    // This class extends JPanel and overrides paintComponent to
    // create a component for drawing - in this case a face.
public 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.