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