//Titel:            Testprogramm zum Interface
//Version:		Version 1,0 27.10.2010
//Copyright:		Copyright (c) 2010
//Autor:			Michael Wilhelm
//Organisation:	FB AI
//Beschreibung:	Erstellen einer Summe der Flächen


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

// Vorübung zum 3. Labor
// Erstellen einer Summe der Flächen
// mit den 2D-Flächen und den 3D-Körpern
// bei Flächen wird der Flächeninhalt genommen
// bei Körpern wird die Oberfläche genommen

// Aktuelle ist es Funktionsfähig, aber
// es läuft nur mit instanceof

public class gui_oop4 extends JFrame {

  JButton BnTest1 = new JButton("2D Test");
  JButton BnTest2 = new JButton("Fläche 2D");
  JButton BnTest3 = new JButton("Volumen 3D");
  JButton BnTest4 = new JButton("Fläche 2D / 3D");
  JButton BnTest5 = new JButton("Test5");

  JTextArea editor = new JTextArea();

  public gui_oop4() {
    setSize(700, 530);
    setLocation(200,100);
    setTitle("GUI mit OOP3");
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    setGUI();
  }

  private void setGUI() {

    editor.setFont( new Font("Arial", Font.BOLD,18)  );
    BnTest1.setFont( new Font("Arial", Font.BOLD,18)  );
    BnTest2.setFont( new Font("Arial", Font.BOLD,18)  );
    BnTest3.setFont( new Font("Arial", Font.BOLD,18)  );
    BnTest4.setFont( new Font("Arial", Font.BOLD,18)  );
    BnTest5.setFont( new Font("Arial", Font.BOLD,18)  );

    this.getContentPane().setLayout( new BorderLayout() );

	JPanel pnButton = new JPanel();
	//pnButton.setBackground(Color.red);
	pnButton.setLayout( new FlowLayout() );
	pnButton.add(BnTest1);
	pnButton.add(BnTest2);
	pnButton.add(BnTest3);
	pnButton.add(BnTest4);
	pnButton.add(BnTest5);

    this.getContentPane().add( pnButton, BorderLayout.NORTH );

    BnTest1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
           BnTest1_Click();
        }
    });
    BnTest2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
           BnTest2_Click();
        }
    });
    BnTest3.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
           BnTest3_Click();
        }
    });
    BnTest4.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
           BnTest4_Click();
        }
    });
    BnTest5.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
           BnTest5_Click();
        }
    });

    this.getContentPane().add( new JScrollPane(editor), BorderLayout.CENTER );

  } // setGUI

   private void editadd(Object obj) {
     editor.append("\n"+obj);
   }

    private void BnTest1_Click() {
       editor.setText("Test1");
       quadrat q=new quadrat(3);
	    editadd( "quadrat: "+q.getFlaeche() );
       kreis kr=new kreis(4);
       editadd( "kreis: "+kr.getFlaeche() );
       rechteck r=new rechteck(3,4);
	    editadd( "rechteck: "+r.getFlaeche() );
    }  // BnTest1_Click


    private void BnTest2_Click() {
       editor.setText("Test2");
       quadrat q=new quadrat(3);
       editadd( "quadrat: "+q.getFlaeche() );
       kreis kr=new kreis(4);
       editadd( "kreis: "+kr.getFlaeche() );
       rechteck r=new rechteck(3,4);
	    editadd( "rechteck: "+r.getFlaeche() );

       Objekt2D [] flaechen = new Objekt2D[3];
       flaechen[0]=q;
       flaechen[1]=kr;
       flaechen[2]=r;
       double summe=0.0;
       for (Objekt2D obj:flaechen) {
			summe+=obj.getFlaeche();
       }
       System.out.println("Summe: "+summe);
       System.out.println("Mittweilwert: "+summe/flaechen.length);
    }  // BnTest2_Click


     // Volumenberechnung
    private void BnTest3_Click() {
       editor.setText("Test3");
       wuerfel w=new wuerfel(3);
       editadd( "würfel: "+w.getVolumen() );
       kugel kg=new kugel(4);
       editadd( "kugel: "+kg.getVolumen() );
       quader q=new quader(3,4,5);
	    editadd( "quader: "+q.getVolumen() );
       Objekt3D [] volumen = new Objekt3D[3];
       volumen[0]=w;
       volumen[1]=kg;
       volumen[2]=q;
       double summe=0.0;
       for (Objekt3D obj:volumen) {
			summe+=obj.getVolumen();
       }
       System.out.println("Summe: "+summe);
       System.out.println("Mittelwert: "+summe/volumen.length);
    }  // BnTest3_Click



    private void BnTest4_Click() {
        editor.setText("Test4");
       editor.setText("Test4");
       quadrat q1=new quadrat(3);
       editadd( "quadrat: "+q1.getFlaeche() );
       kreis kr=new kreis(4);
       editadd( "kreis: "+kr.getFlaeche() );
       rechteck r=new rechteck(3,4);
	    editadd( "rechteck: "+r.getFlaeche()+"\n" );

       wuerfel w=new wuerfel(3);
       editadd( "würfel: "+w.getFlaeche() );
       kugel kg=new kugel(4);
       editadd( "kugel: "+kg.getFlaeche() );
       quader q2=new quader(3,4,5);
	    editadd( "quader: "+q2.getFlaeche() );       

		// hier müsste man etwas ändern
       Object[] flaechen = new Object[6];
       flaechen[0]=q1;  // quadrat
       flaechen[1]=kr;
       flaechen[2]=r;
       flaechen[3]=w;
       flaechen[4]=kg;
       flaechen[5]=q2;  // quader
       double summe=0.0;
       for (Object obj:flaechen) {
		if (obj instanceof Objekt2D) {
			Objekt2D obj2 = (Objekt2D) obj;
			summe+=obj2.getFlaeche();
		}
		else {
			Objekt3D obj3 = (Objekt3D) obj;
			summe+=obj3.getFlaeche();
		}
       }
       editadd( "\nSumme: "+summe);
       editadd( "Mittelwert: "+summe/flaechen.length);
    }  // BnTest4_Click

    private void BnTest5_Click() {
        editor.setText("Test5");
    }  // BnTest5_Click

  public static void main(String[] args) {
    gui_oop4 frame = new gui_oop4();
    frame.setVisible(true);
 }

}  // gui_oop3



// --------------
abstract class Objekt2D {
  int flaechentyp=0;
  public abstract double getFlaeche();
}

class quadrat extends Objekt2D {
	public int a;

	public quadrat(int a) {
    System.out.println("in quadrat");
		this.a=a;
	}

  public double getFlaeche() {
	return a*a;
 }  // getFlaeche
}

class rechteck extends Objekt2D {
	public int a;
	public int b;

	public rechteck(int a, int b) {
    System.out.println("in rechteck");
		this.a=a;
		this.b=b;
	}

  public double getFlaeche() {
	return a*b;
 }  // getFlaeche
}

class kreis extends Objekt2D {
	public int r;

	public kreis(int r) {
    System.out.println("in kreis");
		this.r=r;
	}

  public double getFlaeche() {
	return r*r*Math.PI;
  }  // getFlaeche

}




abstract class Objekt3D {
  int koerpertyp=0;
  public abstract double getVolumen();
	// müsste hier raus
  public abstract double getFlaeche();
}

class wuerfel extends Objekt3D {
	public int a;

	public wuerfel(int a) {
     System.out.println("in wuerfel");
     this.a=a;
	}

  public double getVolumen() {
	return a*a*a;
  }  // getVolumen

  public double getFlaeche() {
	return a*a*6;
 }  // getFlaeche

} // Wuerfel


class quader extends Objekt3D {
	public int a;
	public int b;
	public int c;

	public quader(int a, int b, int c) {
    System.out.println("in quader");
		this.a=a;
		this.b=b;
		this.c=c;
	}

  public double getVolumen() {
	return a*b*c;
 }  // getVolumen

  public double getFlaeche() {
	return 2*a*b + 2*a*c + 2*b*c;
 }  // getFlaeche

}  // Quader

class kugel extends Objekt3D {
	public int r;

	public kugel(int r) {
    System.out.println("in kugel");
		this.r=r;
	}

  public double getVolumen() {
	return 4.0*r*r*r*Math.PI/3.0;
  }  // getVolumen

  public double getFlaeche() {
	return 4.0*r*r*Math.PI;
  }  // getFlaeche

}  // kugel



