package javacodebook.media.graphic.transparency;

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

/** Eine Demonstration der Möglichkeite, transparente Figuren zu zeichnen.
 */
public class TransparentShapes extends javax.swing.JPanel {

    public TransparentShapes() {
        setBackground(Color.white);
    }

    public void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        //Das Graphics-Objekt in ein Graphics2D-Objekt casten, das es ja auch ist
        Graphics2D g = (Graphics2D)graphics;
        //Den Nullpunkt in die Mitte verschieben
        g.translate(getWidth()/2,getHeight()/2);
        int x = -60, y = -25, w = 120, h = 50;
        //Den Rahmen deutlich absetzen
        BasicStroke stroke = new BasicStroke(3.0f);
        g.setStroke(stroke);
        //Rahmen ohne Transparenz zeichnen
        g.setPaint(Color.red);
        g.draw(new Ellipse2D.Double(x, y, w, h));
        //Transparente Farbe definieren (50% Transparenz)
        g.setPaint(new Color(1.0f, 0f, 0f, 0.5f));
        g.fill(new Ellipse2D.Double(x, y, w, h));

        //Koordinatensystem rotieren um 120° und mit der nächsten Farbe zeichnen
        g.rotate(Math.PI/3);
        g.setPaint(Color.green);
        g.draw(new Ellipse2D.Double(x, y, w, h));
        g.setPaint(new Color(0f, 1.0f, 0f, 0.5f));
        g.fill(new Ellipse2D.Double(x, y, w, h));
        //Koordinatensystem erneut rotieren
        g.rotate(Math.PI/3);
        g.setPaint(Color.blue);
        g.draw(new Ellipse2D.Double(x, y, w, h));
        g.setPaint(new Color(0f, 0f, 1.0f, 0.5f));
        g.fill(new Ellipse2D.Double(x, y, w, h));
    }

    public Dimension getPreferredSize() {
        return new Dimension(200,200);
    }

    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 TransparentShapes());
        f.pack();
        f.show();
    }
}
