/**
  * Fenster - Fenster zum Eingeben und Erfassen der Eingangsdaten
  *
  * Programm 			 : Tilgungspläne im Fenster
  * ----------------------------------------------------------------------------
  * Java Version		 : j2sdk1.4.2
  * Entwicklungsumgebung : JCreator LE Vers. 3.10.008
  * ----------------------------------------------------------------------------
  * @autor    		     : Mehmet-Ertan Cam
  * ----------------------------------------------------------------------------
  * @since   			 : 15.03.05 - Erstellung
  * @since				 : 22.03.05 - Kommentierung
  * ----------------------------------------------------------------------------
  * Dateiname			 : Eingabe.java
  * @version  			 : 1.0
  * ----------------------------------------------------------------------------
  * Beschreibung		 : Diese Klasse erzeugt das Menü und die GUI-Komponenten,
  *						     fordert zur Eingabe von Daten (Kredit,Laufzeit,Zinssatz) auf und
  *						     prüft, ob diese im gültigen Wertebereich liegen;
  *						   Wenn dies der Fall ist, werden sie zur Klasse Spiel weitergegeben
  *						   Erhält die berechneten Daten und gibt sie im Textfeld aus;
  *						   Ereignisse des Menüs werden behandelt
  * ----------------------------------------------------------------------------
  */
  
  import java.awt.*;				// wegen Anzeige von Graphiken
  import java.awt.event.*;	    	// EventHandling
  
class Fenster 		
extends Frame 						// Window mit Rahmen				
implements ItemListener				// Listener für Item-Aktionen
{
 	//Instanzvariablen 
 	MenuBar 	menubar;
	
	Menu 		datei,
		 		praeferenzen,
		 		info;
		 
	MenuItem 	beenden,
			 	beispiel1,
			 	beispiel2,
 			 	autor;
 	
	TextField	tfKredit,
        		tfZinssatz,
    			tfLaufzeit;
    
    CheckboxGroup cbg;
    Checkbox    cbRate, 
			    cbAnnuitaet;
    
    Label 		status;
    
 	TextArea 	taAusgabe;
        
        
  /** --------------------------------------------------------------------------
    * Konstruktor - Eingabe
    *
    * Erstellung des Layoutmanagers
    * Hinzufügen der Objekte in das Fenster
    * Implemetierung des ActionListener + WindowListeners
    * --------------------------------------------------------------------------
    */
    
	public Fenster()
	{
		
		// Titel und Hintergrundfarbe
		setTitle("Tilgungsplan");
		setBackground(Color.lightGray);
		
  		// Menü
  		menubar = new MenuBar();
		setMenuBar(menubar);
		
		
		datei = new Menu("Datei");
		menubar.add(datei);
		
		beenden = new MenuItem("Beenden");
		datei.add(beenden);
	
		
		praeferenzen = new Menu("Präferenzen");
		menubar.add(praeferenzen);
		
		beispiel1 = new MenuItem("Beispiel 1");
		praeferenzen.add(beispiel1);	
	
		beispiel2 = new MenuItem("Beispiel 2");
		praeferenzen.add(beispiel2);		
	
		
		info = new Menu("Info");
		menubar.add(info);
		
		autor = new MenuItem("Autor");
		info.add(autor);
		
		// Listeners
		beenden.addActionListener(new MyActionListener());
		beispiel1.addActionListener(new MyActionListener());
		beispiel2.addActionListener(new MyActionListener());
		autor.addActionListener(new MyActionListener());
		
		
		// Layout Block
  		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints constr = new GridBagConstraints();
		setLayout( gridbag );
		
		// Abstand
		constr.insets = new Insets(35, 10, 0, 10);

		// Label und Textfelder
		constr.gridx = 0;
		constr.gridy = 1;
		this.add(new Label("Kredit                "),constr);
				
		tfKredit = new TextField(12);
		constr.gridx = 1;
		constr.gridy = 1;
		this.add(tfKredit,constr);
		
		constr.gridx = 0;
		constr.gridy = 2;
		this.add(new Label("Zinssatz (%)     "),constr);
		
		tfZinssatz = new TextField(12);
		constr.gridx = 1;
		constr.gridy = 2;
		this.add(tfZinssatz,constr);		
		
		constr.gridx = 0;
		constr.gridy = 3;
		this.add(new Label("Laufzeit (Jahre)"),constr);
		
		tfLaufzeit = new TextField(12);
		constr.gridx = 1;
		constr.gridy = 3;
		this.add(tfLaufzeit,constr);			
		
		// CheckBoxGroup
		cbg = new CheckboxGroup();
		
		cbRate = new Checkbox("Ratentilgung",cbg,false);
		constr.gridx = 1;
		constr.gridy = 4;
		constr.anchor = GridBagConstraints.WEST; 
		cbRate.addItemListener(this);
		add(cbRate,constr);
		
		cbAnnuitaet = new Checkbox("Annuitätentilgung",cbg,false);
		constr.gridx = 1;
		constr.gridy = 5;
		constr.anchor = GridBagConstraints.WEST; 
		cbAnnuitaet.addItemListener(this);
		add(cbAnnuitaet,constr);
		
	 	// Label
		status = new Label("Daten eingeben & Radiobutton betätigen !");
		status.setBackground(Color.yellow);
		constr.gridx = 0;
		constr.gridy = 6;
		constr.gridwidth = 2;
		constr.fill = GridBagConstraints.HORIZONTAL;
		this.add(status,constr);
		
		// Textfeld
        taAusgabe = new TextArea(" ",20,70);
        taAusgabe.setFont(new Font("monospaced",Font.PLAIN, 12));
        constr.gridx=2;
        constr.gridy=1;
        constr.gridheight=6;
        this.add(taAusgabe, constr);
        
        this.addWindowListener(new StdWindowAdapter(this));	// Implementierung eines WindowListeners
    }
	
  /** --------------------------------------------------------------------------
	* Ereignismethode - itemStateChanged
	*
	* Radibutton wurde betätigt;
	* Um festzustellen, welcher Button dafür verantwortlich ist, 
	* wird ein Objekt erzeugt;
	* Auslesen und gleichzeitiges Testen dieser Werte;
	* Es werden die Werte aus den Textfeldern an den Konstuktorder Klasse 
	* Berechnung übergeben;
	* 
    * die Methode tabellenAnfang(), der Klasse Berechnung wird aufgerufen 
    * und der return-Wert wird an die TextArea angehängt;
    * die Methode tabelleRechnung() der Klasse Berechnung wird aufgerufen
    * und der return-Wert wird an die TextArea angehängt;
    * die Methode tabellenEnde() der Klasse Berechnung wird aufgerufen 
    * und der return-Wert wird an die TextArea angehängt;
    *
	* Hinweis auf das Ergebnis;
	*
	* @param kredit 	(double) : Höhe des Kredits aus dem Textfeld
	* @param zinssatz	(double) : Höhe des Zinssatzes aus dem Textfeld
	* @param laufzeit   (int)	 : Dauer des Kredits
	*
    * @exception  : Werte die nicht im erwünschten Wertebereich liegen "abfangen"
	* --------------------------------------------------------------------------
	*/
   	public void itemStateChanged(ItemEvent event)
	{
	 	Checkbox cb = (Checkbox) event.getItemSelectable();
	 		  
		try
		{
			// Prüfung ob Strings im gültigen Wertebereich liegt		
			double kredit = Double.parseDouble(tfKredit.getText());	
			double zinssatz = Double.parseDouble(tfZinssatz.getText());
			int laufzeit = Integer.parseInt(tfLaufzeit.getText());
	  		
	  		taAusgabe.append("\n -------Tilgungsplan bei -- gleichbleibenden -- ");
	  		
	  		if (cb.getLabel() == "Ratentilgung")
	  			taAusgabe.append("Tilgungsraten--------");
	  		else 
	  			taAusgabe.append("Annuitäten-----------");		
	  		
  			Berechnung übergabeRate = new Berechnung(kredit,zinssatz,laufzeit,cb.getLabel());
            
            taAusgabe.append(übergabeRate.tabellenAnfang());
            for (int time = 1; time <= Integer.parseInt(tfLaufzeit.getText()); time++)
            {
            	taAusgabe.append(übergabeRate.tabelleRechnung());		  
			}
			taAusgabe.append(übergabeRate.tabellenEnde());
			
			status.setText("Ergebnis");
			status.setBackground(Color.green);		
		}
		
		// Ausnahmesituation
		// Strings nicht im gewünschten Wertebereich
		catch (NumberFormatException nfe)
		{
			status.setText("Fehler bei der Eingabe !");
			status.setBackground(Color.RED);
		}
	}
	
  /** --------------------------------------------------------------------------
	* Ereignismethode - MyActionListener
	* 
	* Behandlung des Menüs:
	* - Beendung des Programms
	* - Initialisierung mit Werten
	* - Anzeigen des Autors im neuen Fenster
	* --------------------------------------------------------------------------
	*/
	public class MyActionListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			Object quelle = e.getSource();
			
			if (quelle == beenden)
			{
				System.exit(0);
			}
			else if (quelle == beispiel1)
			{
				tfKredit.setText("420000");
				tfZinssatz.setText("6.5");
				tfLaufzeit.setText("7");
			}
			else if (quelle == beispiel2)
			{
				tfKredit.setText("1000000");
				tfZinssatz.setText("7.5");
				tfLaufzeit.setText("6");
			}
			else if (quelle == autor)
			{
				Autor window = new Autor();		// Objekterzeugung (window) der Klasse Eingabe
				window.setVisible(true);		// Anzeigen des Fensters
			}
		}	
	}
	
		
}