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
- 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 ofpaintComponent
to find the width and height of the panel. Use these values so that the face expands and contracts more appropriately. - 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.