package javacodebook.media.draw.simple;

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

/**
 * Ein einfaches Panel, um die Zeichenmöglichkeiten in Java zu demonstrieren.
 */
public class SimpleDraw extends JPanel{

    /**
     * In Swing sollte im Gegensatz zum AWT immer die Methode paintComponent
     * überschrieben werden.
     */
    public void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        //Graphics-Objekt ist in Wahrheit ein Graphics2D-Objekt
        Graphics2D g = (Graphics2D) graphics;
        //aktuelle Zeichenfarbe setzen
        g.setColor(Color.black);
        //Eine Linie zeichnen
        g.draw(new Line2D.Double(0,100,319,100));//Java2D-Version
        //Ein Rechteck zeichnen
        g.draw(new Rectangle2D.Double(10, 10, 80, 60));
        //Einen Kreis gefüllt zeichnen
        g.draw(new Ellipse2D.Double(130,10,60,60));
        //Eine Ellipse mit Farbverlauf gefüllt zeichnen
        g.draw(new Ellipse2D.Double(230, 10, 80, 60));
        //Ein Rechteck mit abgerundeten Ecken zeichnen
        g.draw(new RoundRectangle2D.Double(10, 110, 80, 60, 15, 15));
        //Eine Kreisbogen zeichnen
        g.draw(new Arc2D.Double(120, 110, 80, 70, 90, 135, Arc2D.OPEN));
        //Ein Tortenstück zeichnen
        g.draw(new Arc2D.Double(240, 110, 80, 80, 90, 45, Arc2D.PIE));
    }

    /** Die gewünschte Größe des Panels festlegen */
    public Dimension getPreferredSize() {
        return new Dimension(320, 200);
    }

    /** Einen Frame erzeugen und das Panel anzeigen */
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().setLayout(new BorderLayout());
        f.getContentPane().add(new SimpleDraw(), BorderLayout.CENTER);
        f.pack();
        f.show();
    }
}
