/**
  * Eingabe - Fenster zum Eingeben und Erfassen der Eingangsdaten
  *
  * Programm 			 : Nimm-Spiel
  * ----------------------------------------------------------------------------
  * Java Version		 : j2sdk1.4.2
  * Entwicklungsumgebung : JCreator LE Vers. 3.10.008
  * ----------------------------------------------------------------------------
  * @autor    		     : Mehmet-Ertan Cam
  * ----------------------------------------------------------------------------
  * @since   			 : 03.03.05 - Erstellung
  * @since				 : 10.03.05 - Kommentierung
  * ----------------------------------------------------------------------------
  * Dateiname			 : Eingabe.java
  * @version  			 : 1.0
  * ----------------------------------------------------------------------------
  * Beschreibung		 : Erzeugt GUI-Komponenten,
  *						     fordert zur Eingabe von Daten (Anzahl und Höchstzahl) auf und
  *						     prüft, ob diese im gültigen Wertebereich liegen;
  *						   Wenn dies der Fall ist, werden sie zur Klasse Spiel weitergegeben
  * ----------------------------------------------------------------------------
  */
  
  import java.awt.*;				// wegen Anzeige von Graphiken
  import java.awt.event.*;	    	// EventHandling


class Eingabe 		
extends Frame 						// Window mit Rahmen				
implements ActionListener			// Listener für Button-Aktionen
					
{
	
	// Instanzvariablen 
	TextField anzahl,
			  höchstzahl;
	
	Button 	  okay;
	
	Label 	  status;
	
 
  /** --------------------------------------------------------------------------
    * Konstruktor - Eingabe
    *
    * Erstellung des Layoutmanagers
    * Hinzufügen der Objekte in das Fenster
    * Implemetierung des ActionListener + WindowListeners
    * --------------------------------------------------------------------------
    */
	public Eingabe()
	{
		
		// Titel und Hintergrundfarbe
		setTitle("Eingabe");
		setBackground(Color.lightGray);
		
		// Layout Block
  		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints constr = new GridBagConstraints();
		setLayout( gridbag );
		
		// Label
		constr.gridx = 0;
		constr.gridy = 0;
		this.add(new Label("Anzahl                : "),constr);
		
		// Textfeld
		anzahl = new TextField("25",5);
		constr.gridx = 1;
		constr.gridy = 0;
		this.add(anzahl,constr);
		
		// Label
		constr.gridx = 0;
		constr.gridy = 1;
		this.add(new Label("Höchstzahl       : "),constr);
		
		// Textfeld
		höchstzahl = new TextField("6",5);
		constr.gridx = 1;
		constr.gridy = 1;
		this.add(höchstzahl,constr);
		
		// Abstand
		constr.insets = new Insets(15, 15, 10, 10);
	
		// Button
		okay = new Button ("OK");
		constr.gridx = 0;
		constr.gridy = 3;
		constr.gridwidth = GridBagConstraints.REMAINDER;
		constr.fill = GridBagConstraints.HORIZONTAL;
		this.add(okay,constr);
		
		// Label	 	
		status = new Label("");
		status.setBackground(Color.lightGray);
		constr.gridx = 0;
		constr.gridy = 4;
		constr.fill = GridBagConstraints.HORIZONTAL;
		this.add(status,constr);
		
		pack();							// damit gerade alle Komponenten passen
		
		okay.addActionListener(this);	// Implementierung eines ActionListeners
		this.addWindowListener(new StdWindowAdapter(this));	// Implementierung eines WindowListeners
	} // end of Konstruktur Eingabe
	
	
  /** --------------------------------------------------------------------------
    * Methode - actionPerformed
    * 
    * Button aktiviert:
    * Textfelder werden ausgelesen und nach folgenden Kriterien bewertet:
    *   -  Integer-Bereich
    *	-  grösser als 1
    *	-  "angemessenes" Verhältnis
    * 
    * Eingegebene Werte werden erst an den Konstruktor der Klasse Spiel übergeben,
    *   wenn sie die Kriterien erfüllt haben, sonst erscheinen diverse Fehlermeldungen
    *
    * @param a_geprüft (int) : Wert aus dem Textfeld (Anzahl der Streichhölzer)
    * @param h_geprüft (int) : Wert aus dem Textfeld (Anzahl, der weggenommen werden darf)
    * @exception 			 : Werte, die nicht im Integer-Bereich liegen "fangen"
    * --------------------------------------------------------------------------
    */	
	public void actionPerformed(ActionEvent event)
	{
			
		try
		{
			
			// Auslesen des Textfeldes und Prüfung, ob Werte im Integer-Bereich liegen		
			int a_geprüft = Integer.parseInt(anzahl.getText());     // Anzahl der Streichhölzer
			int h_geprüft = Integer.parseInt(höchstzahl.getText()); // Anzahl, der weggenommen werden darf
			
			// Werte müssen grösser als 1 sein 
			if (h_geprüft>1 & a_geprüft>1)
			{
				
				// Prüfung, ob Werte "angessenes" Verhähltnis haben (hier: 3 zu 1)
				if (3*h_geprüft < a_geprüft)
				{
					Spiel window = new Spiel(a_geprüft,h_geprüft);   // Objekterzeugung (window)
					window.setVisible(true);						 // Anzeigen des Fensters
				
					// Hintergrundfarbe wieder grau und ohne Fehlermeldung, wenn Angaben korrekt waren
					status.setText("");
					status.setBackground(Color.lightGray);
				}
				
				else
				{
					status.setText("Verhältnis stimmt nit(3/1)");
					status.setBackground(Color.RED);
				}	
							
			}
			
			else 
			{
				status.setText("Zahlen müssen >1 sein!");
				status.setBackground(Color.RED);
			}
				
		}
		 	
		// Ausnahmesituation
		catch (NumberFormatException nfe)
		{
			status.setText("Fehler bei der Eingabe !");
			status.setBackground(Color.RED);
		} 
	
	} // end of actionPerformed
	
} // end of class Eingabe
