/************************************************
Grundlegende Algorithmen mit Java,
http://algorithmen-und-problemloesungen.de/
Copyright @2007-2008 by Doina Logofatu
************************************************/

import java.awt.*;
import javax.swing.*;

public class P11PaintQuadrateCircle extends JPanel {
  /* Because implements Serializable */
  private static final long serialVersionUID = -6741198167758549984L;

  /** @see java.awt.Container#paint(java.awt.Graphics) */
  @Override
  public void paint(Graphics g) {
    Dimension dim = this.getSize();
    drawSquare(g, dim.width / 2, dim.height / 2, Math.min(dim.width / 2,
        dim.height / 2));
  }

  private void drawCircle(Graphics g, int x, int y, int r) {
    if (r > 25) {
      g.drawOval(x - r / 2, y - r / 2, r, r);
      drawSquare(g, x, y, r);
    }
  }

  private void drawSquare(Graphics g, int x, int y, int l) {
    if (l > 1) {
      g.drawRect(x - l / 2, y - l / 2, l, l);
      drawCircle(g, x - l / 2, y - l / 2, l / 2);
      drawCircle(g, x - l / 2, y + l / 2, l / 2);
      drawCircle(g, x + l / 2, y - l / 2, l / 2);
      drawCircle(g, x + l / 2, y + l / 2, l / 2);
    }
  }

  public static void main(String args[]) {
    JFrame frame = new JFrame("Rekursivitaet Beispiel");
    P11PaintQuadrateCircle quadratePanel = new P11PaintQuadrateCircle();
    frame.getContentPane().add(quadratePanel);
    quadratePanel.setPreferredSize(new Dimension(400, 400));
    frame.pack();
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    // put the frame on the center of the screen
    Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameDim = frame.getSize();
    frame.setLocation((screenDim.width - frameDim.width) / 2,
        (screenDim.height - frameDim.height) / 2);
    // display the frame
    frame.setVisible(true);
  }
}

