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

// Beispiel mit eines Kreises
// Drei Varianten
//   Stroke danach Paint
//   Stroke danach Paint, unterschiedliche Farbe
//   Paint  danach Stroke

public class Dialog_Area_2D extends JFrame {

  CCanvas _canvas = new CCanvas();


  public Dialog_Area_2D(String caption) {
    setTitle(caption);
    setGUI();
  }

  private void setGUI() {
    this.getContentPane().setLayout( new BorderLayout() );
    this.getContentPane().add(_canvas, BorderLayout.CENTER);
  }

    // dient zum Beenden
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if(e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }



    public static void main(String args[]) {
      Dialog_Area_2D f = new Dialog_Area_2D("Dialog_Area_2D");
     	f.setSize(660,260);
    	f.setVisible(true);
    }


}



class CCanvas extends JPanel {

  public float LineWidth=1f;
  public float MiterSize=4.0f;
  public int EndStyles=BasicStroke.CAP_BUTT;  //CAP_BUTT  CAP_ROUND  CAP_SQUARE
  public int JoinStyles=BasicStroke.JOIN_BEVEL;  //BasicStroke.JOIN_MITER  BasicStroke.JOIN_ROUND
  public int LineStyle;


  public void paint (Graphics g) {
    //int x = 80;

    System.out.println("paint");

    Rectangle r = new Rectangle();  // double wert
    g.getClipBounds(r);
        // Löschen des Bildschirms
    g.setColor(Color.white);
    g.fillRect(0,0, (int)r.getWidth(), (int)r.getHeight() );

    // holt die Abmessungen des Canvas

    g.setColor(Color.black);

    Graphics2D g2 = (Graphics2D) g;


    // 1. Kreis: erst Fläche, dann Linie
    g2.setStroke(  new BasicStroke(10) );
    Color smokey = new Color(128,128,128,128);
    g2.setPaint( smokey );
    int top = 10;
    int left = 10;
    int width = (int) (r.getWidth()/4.0);
    int height = (int) (r.getHeight()*0.8);
    g2.drawOval(left,top,width,height);  // kompletter voller kreis
    g2.fillOval(left,top,width,height);// voller kreisring, mit 2xbreite

    // 2. Kreis: erst Linie, dann Fläche
    left+=width+50;
    g2.setPaint(Color.black);
    g2.drawOval(left,top,width,height);
    g2.setPaint(Color.gray);
    g2.fillOval(left,top,width,height);

    // 3. Kreis: erst Fläche, dann Linie
    left+=width+50;
    g2.setPaint(Color.gray);
    g2.fillOval(left,top,width,height);
    g2.setPaint(Color.black);
    g2.drawOval(left,top,width,height);
  }

}



class CBasis {
    public static final int C_LEER = 1;
    public static final int C_KEINEZAHL = 2;
    public static final int C_ZUKLEIN = 3;
    public static final int C_ZUGROSS = 4;

      // Konstanten für den Error Code als String
    public static final String SZ_LEER = "Leerer Text";
    public static final String SZ_KEINEZAHL = "Konvertierung schlug fehl";
    public static final String SZ_ZUKLEIN = "Für den Bereich zu klein";
    public static final String SZ_ZUGROSS = "Für den Bereich zu groß";

    private static int intVal;          // speichert das Ergebnis
    private static long longVal;        // speichert das Ergebnis
    private static double dblVal;       // speichert das Ergebnis

    private static int ValError = 0;   // speichert den Konvertierungfehler


    /**
    * description: überprüft, ob der String eine Integerzahl ist
    * Verwendet eine interne Variable zum Speichern des Wertes
    * @see DVal, LVal, getErrorCode
    *
    * @version     1.0  07.07.2002
    * @author      Michael Wilhelm HS Harz, FB AI
    * @param String sText
    * @return boolean
    * @exception keine
    */
    public static boolean IVal(String sText) {
        // erläuterung von iIVal = Integer.valueOf(szText).intValue();
        boolean result = true;
        String s;
        s = new String(sText); // neues Objekt
        s.trim();
        if (s.length() == 0) {
            ValError = C_LEER;
            intVal = 0;
            result = false;
        }
        else {
            try {
                intVal = Integer.valueOf(sText).intValue();
                ValError = 0;
            }
            catch (NumberFormatException e) {
                // Check ob die "Zahl" für den Integerbereich zu klein oder zu groß
                // System.err.println(e);
                try {
                    dblVal = Double.valueOf(sText).doubleValue();
                    if ( dblVal<Integer.MIN_VALUE) {
                      ValError = C_ZUKLEIN;
                    }
                    if ( dblVal>Integer.MAX_VALUE) {
                      ValError = C_ZUGROSS;
                    }
                }
                catch (NumberFormatException e2) {
                    // Hier könnte noch eine genauere Abfrage integriert werde,
                    // ob die Zahl nicht zu groß für den int-Bereich ist
                    // System.err.println(e);
                    ValError = C_KEINEZAHL;
                    intVal = 0;
                    result = false;
                }
                intVal = 0;
                result = false;
            }
        }
        return result;
    } // IVal


    /**
    * description: gibt den konvertierten Wert aus
    * @see IVal, DVal, LVal, getErrorCode
    *
    * @version     1.0  07.07.2002
    * @author Michael Wilhelm HS Harz, FB AI
    * @param String sText
    * @return String
    * @exception keine
    * @use gibt den Wert der Konvertierung aus
    * @see #setIValError
    * @see #setLValError
    * @see #setDValError
    */
    public static int getIValResult() {
       return intVal;
    }



    /**
    * DVal
    * description: überprüft, ob der String eine Double-Zahl ist
    * Verwendet eine interne Variable zum Speichern des Wertes
    * @see IVal, LVal, getErrorCode
    *
    * @version     1.0  07.07.2002
    * @author      Michael Wilhelm HS Harz, FB AI
    * @param String sText
    * @return boolean
    * @exception keine
    */
    public static boolean DVal(String sText) {
        // erläuterung von iIVal = Integer.valueOf(szText).intValue();
        boolean result = true;
        String s;
        s = new String(sText); // neues Objekt
        s.trim();
        if (s.length() == 0) {
            ValError = C_LEER;
            dblVal = 0;
            result = false;
        }
        else {
            try {
                sText = sText.replace(',','.');
                dblVal = Double.valueOf(sText).doubleValue();
                ValError = 0;
            }
            catch (NumberFormatException e) {
                ValError = C_KEINEZAHL;
                dblVal = 0;
                result = false;
            }
        }
        return result;
    } // DVal


    /**
    * description: gibt den konvertierten Wert aus
    * @see IVal, DVal, LVal, getErrorCode
    *
    * @version     1.0  07.07.2002
    * @author Michael Wilhelm HS Harz, FB AI
    * @param keinen
    * @return double
    * @exception keine
    * @use gibt den Wert der Konvertierung aus
    * @see #getIValError
    * @see #setLValError
    * @see #setDValError
    */
    public static double getDValResult() {
       return dblVal;
    }


}

    
