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