Java: Example - Drawing a Face v2
Main ideas in this example: Create a window by subclassing Subclass One class per source file - a very good practice. |
The main program and GUI
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 |
// File : GUI-lowlevel/face2/Face2.java - Example app with graphics component. // Description: Application which simply displays Ms Paclady. // Illustrates: 1. Basic JFrame subclass style of creating window. // 2. Subclassing JComponent and overriding JComponent to // do graphics. // Author : Fred Swartz - 2007-01-20 - Placed in public domain. import java.awt.*; import javax.swing.*; ///////////////////////////////////////////////////////////////////////// Face public class Face2 extends JFrame { // ================================================================== main public static void main(String[] args) { Face2 window = new Face2(); window.setVisible(true); } // ============================================================ constructor Face2() { JPanel content = new JPanel(); // Create content panel. content.setLayout(new BorderLayout()); PacLady drawing = new PacLady(); // Create a PacLady content.add(drawing, BorderLayout.CENTER); // Put in expandable center. this.setContentPane(content); this.setTitle("Ms Paclady"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); // Finalize window layout this.setLocationRelativeTo(null); // Center window on screen. } } |
The graphical component that draws a face
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 |
// File : PacLady.java // Purpose: Graphics component to display Ms Paclady. // Author : Fred Swartz - 1996 ... 2006-12-17 - Placed in public domain. import java.awt.*; import javax.swing.*; ///////////////////////////////////////////////////////// class PacLady // This class extends JComponent and overrides paintComponent to // create a component for drawing - in this case a face. // It doesn't do anything useful. public class PacLady extends JComponent { //====================================================== constants private static final int BORDER = 8; // Border in pixels. //===================================================== constructor PacLady() { this.setPreferredSize(new Dimension(400, 400)); // size } //================================================== paintComponent @Override public void paintComponent(Graphics g) { int w = getWidth(); int h = getHeight(); //... Draw background. g.setColor(Color.LIGHT_GRAY); g.fillRect(0, 0, w, h); //... Draw the head with open mouth and 8 pixel border g.setColor(Color.PINK); g.fillArc(BORDER, BORDER, w - 2*BORDER, h - 2*BORDER, 30, 300); //... Draw the eye g.setColor(Color.MAGENTA); int eyeSize = w / 7; g.fillOval(w / 2, h / 5, eyeSize, eyeSize); } } |