Java: Example - CirclePanel.java

Problem: The Java Graphics class draws a circle with drawOval(), whose parameters are not entirely intuitive. It uses a point at the top left of an imaginary bounding rectangle and the width and height. The standard way of of thinking about a circle is the center point and the radius. How can we program using the center point and a radius?

Solution: Write a method, drawCircle(), which has parameters for the coordinates of the center point and a radius. It then calls drawOval with transformed parameters.

To make a drawing, define a new component by subclassing JPanel and overriding the paintComponent() method. This new component can be used just as any other component in a panel. See the calling program in Example - CircleMain.java.

/**
  * methods/CirclePanel.java - Component to draw circles.
  * This class functions as a GUI component, and can be added to a layout.
  * @version 22 June 1998, revised July 1999,  2002-02-07 JPanel
  * @author Fred Swartz
  */

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

public class CirclePanel extends JPanel {

    //=========================================== constructor
    public CirclePanel() {
        setPreferredSize(new Dimension(100, 100));
        setBackground(Color.white);
    }//end constructor

    //=========================================== paintComponent
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        // Try drawing some example circles.
        drawCircle(g, 30, 30, 20); // center (30,30) r=20
        drawCircle(g, 30, 30, 15); // center (30,30) r=15
        drawCircle(g, 30, 30, 10); // center (30,30) r=10
        drawCircle(g, 80, 70, 5);  // center (80,70) r=5
    }//end paintComponent

    //========================================== drawCircle
    // Convenience method to draw from center with radius
    public void drawCircle(Graphics cg, int xCenter, int yCenter, int r) {
        cg.drawOval(xCenter-r, yCenter-r, 2*r, 2*r);
    }//end drawCircle
} // end class CirclePanel