import java.awt.*;
import java.awt.geom.*;


public class MyConstructiveAreaGeometry {
	public static void main (String[] args) {
		
		//Fenster erzeugen
		MyFrame frame = new MyFrame( "Seien sie konstruktiv!", 500,300 ) {
			public void paint(Graphics g) {
				
				//Upcast --> mehr Funktionen in Graphics2D
				Graphics2D g2d=(Graphics2D)g;
				
				//Geometrische Formen erstellen
				Ellipse2D e = new Ellipse2D.Float( 20,20, 400,200 );
				Rectangle2D r = new Rectangle2D.Float( 300,80, 190,180 );
				Rectangle2D r2 = new Rectangle2D.Float( 80, 50, 50, 50 );
				Rectangle2D r3 = new Rectangle2D.Float( 90,150, 100, 100 );
				
				//Area-Objekte erstellen
				Area a_e = new Area( e );
				Area a_r = new Area( r );
				Area a_r2 = new Area ( r2 );
				Area a_r3 = new Area( r3 );
				
				//Flächen verknüpfen, Ergebnis in a:
				Area a = new Area();
				a.add( a_e ); //addieren der Ellipse
				a.add( a_r ); //addieren Rechteck r
				a.subtract( a_r2 ); //subtrahieren Rechteck r2
				a.exclusiveOr( a_r3 ); //exklusives Oder mit Rechteck r3
				
				//eine Verlaufsfarbe setzen
				g2d.setPaint( new GradientPaint( 0,0, Color.blue,
							500, 500, Color.green )
					);
					
				//Ergebnis füllen (dies ist möglich, weil auch Area Shape implementiert)
				g2d.fill( a );
			}
		};
		
	}
}
