# 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