/***************************************************************/
/* Prof. Dr. Carsten Vogt                                      */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                      */
/* http://www.nt.fh-koeln.de/vogt                              */
/*                                                             */
/* Das Programm demonstriert eine kleine Auswahl grundlegender */
/* Grafikmethoden.                                             */
/***************************************************************/

import java.awt.*;
import javax.swing.*;

class MyPanel extends JPanel {

 // paint-Methode zum Zeichnen der Grafik im Grafik-Fenster g
 // (wird z.B. automatisch aufgerufen durch den Oberflaechen-Verwalter
 //  des Betriebssystems)

 public void paint(Graphics g) {

  // Linie zeichnen
  // mit Ausgangspunkt (x1,y1) = (10,50)
  // und Endpunkt (x2,y2) = (100,150):

  g.drawLine(10,50,100,150);

  // Kreisbogen zeichnen
  // mit linkem oberem Begrenzungspunkt (x1,y1) = (70,70),
  //   [= linke obere Ecke des umschließenden Rechtecks]
  // umschließendem Rechteck der Groesse 140 x 140,
  // Ausgangswinkel 0 Grad
  // und ueberstrichenem Winkel 90 Grad:

  g.drawArc(70,70,140,140,0,90);

  // gefuellten Kreisbogen zeichnen
  // mit linkem oberem Begrenzungspunkt (x1,y1) = (260,70)
  //   [= linke obere Ecke des umschliessenden Rechtecks]
  // umschliessendem Rechteck der Größe 140x140,
  // Ausgangswinkel 22 Grad
  // und ueberstrichenem Winkel 135 Grad:

  g.fillArc(260,70,140,140,22,135);

  // Rechteck zeichnen
  // mit linker oberer Ecke (x1,y1) = (450,50)
  // und Groesse 90 x 100:

  g.drawRect(450,50,90,100);

  // Rechteck mit abgerundeten Ecken zeichnen
  // mit linker oberer Ecke (x1,y1) = (600,50),
  // Groesse 90 x 100
  // und Eckenrundung mit horiz. Ausdehnung 30 und vert. Ausdehnung 40:

  g.drawRoundRect(600,50,90,100,30,40);

  // Oval zeichnen
  // mit linkem oberen Begrenzungspunkt (x1,y1) = (750,50)
  //   [= linke obere Ecke des umschliessenden Rechtecks]
  // horiz. Ausdehnung 150 und vert. Ausdehnung 90:

  g.drawOval(750,50,150,90);

  // Farbe ab hier auf Rot setzen:

  g.setColor(Color.red);

  // String zeichnen
  // mit Schriftart "Times Roman", Fettdruck und Groesse 20
  // sowie Ausgangspunkt (x1,y1) = (10,270):

  String s = "Hello";
  g.setFont(new Font("Times Roman",Font.BOLD,20));
  g.drawString(s,10,270);

  // gefuelltes Rechteck zeichnen
  // mit linker oberer Ecke (x1,y1) = (100,250)
  // und Groesse 100 x 100:

  g.fillRect(100,250,100,100);

  // gefuelltes Oval zeichnen
  // mit linkem oberen Begrenzungspunkt (x1,y1) = (250,250),
  //   [= linke obere Ecke des umschliessenden Rechtecks]
  // horiz. Ausdehnung 200 und vert. Ausdehnung 100:

  g.fillOval(250,250,200,100);

  // geschlossenen Polygonzug mit vier Ecken zeichnen,
  // dabei Angabe der x- und y-Werte in zwei Arrays:

  int xWerte1[] = { 500, 600, 700, 600 };
  int yWerte1[] = { 280, 250, 280, 400 };
  g.drawPolygon(xWerte1, yWerte1,4);

  // geschlossenen gefuellten Polygonzug mit acht Ecken zeichnen,
  // dabei Angabe der x- und y-Werte in zwei Arrays:

  int xWerte2[] = { 750, 800, 850, 900, 900, 850, 800, 750 };
  int yWerte2[] = { 300, 250, 250, 300, 350, 400, 400, 350 };
  g.fillPolygon(xWerte2, yWerte2,8);

 }

}

class FrameMitGrafik extends JFrame {

 // Konstruktor für umschliessenden Rahmen

 FrameMitGrafik(String st) {

  super(st);
  setForeground(Color.black);
  setBackground(Color.white);
  setFont(new Font("Dialog",Font.BOLD,12));
  setSize(950,450);
  setLocation(0,0);
  MyPanel panel = new MyPanel();
  getContentPane().add(panel);
  setVisible(true);

 }

}

public class BasicGraphics {

  public static void main(String args[]) {

   // Hauptprogramm: Erzeugung der Oberflaeche

   new FrameMitGrafik("Grafiken");  

  }

}

