import java.awt.*;/*-----------------------------------------------------------Autor:		Stefan Berner (SB)Projekt:	Software-Praktikum, Versuch 1Java:		Java v1.0.xCopyright:	Forschungsgruppe Requirements Engineering,			Institut fuer Informatik, Universitaet ZuerichVersion:	Calculator v1.3, SB, 26.03.1997-------------------------------------------------------------ZWECKController fŸr die <CalculatorEngine>. Stellt ein Tastenfeld  zur Bedienung des Taschenrechernsbereit und verarbeitet alle Eingaben auf dem Tastenfeld weiter. Hierzu wird in AbhŠngigkeit vonder jeweiligen Eingabe eine entsprechnde Nachricht an das "Model" <ce> versandt.Das Tastenfeld verfŸgt Ÿber Zifferntasten fŸr die Ziffern 0-9, Operationstasten mit denOperationen Addition, Subtraktion, Multiplikation, Division und Negation sowie den beidenSpezialtasten "C/Clear", um den Rechner zurŸckzusetzen und "=/Calculate",um das Ergebnis zu berechnen. WICHTIG, bitte beachten: Das GUI-Event-Handling erfolgt noch nach Java 1.0.2-Konventionen. */class CalculatorKeypad extends Panel	{	/* Instanzvariablen */		CalculatorEngine ce;	// "Model", welches die Berechnung durchfŸhrt 		/* Zahlentasten: b0=0, b1=1 etc. */	private Button b0, b1, b2, b3, b4, b5, b6, b7, b8, b9;	private Button bPnt; 		// Dezimalpunkt	/* Operationstasten */ 	private Button bAdd;		// Addition	private Button bSub;		// Subtraktion	private Button bMul;		// Multiplikation	private Button bDiv;		// Division		private Button bNeg;	 	// Negation	/* Spezial Tasten */	private Button bClc;		// Calculate bzw. "="-Taste	private Button bClr;		// Clear-Taste			/* Konstruktoren */		/**	PREC	[ce] darf nicht null sein	   	POST	Korrekt initialisiertes Tastenfeld. Hierzu wird die Instanzvariable <ce>				mit einer CalculatorEngine belegt und die Tasten des Tastenfeldes				werden angelegt 	erste Version: SB, 20.03.1997	letzte Aenderung: SB, 22.03.1997 */	CalculatorKeypad( CalculatorEngine ce )		{		this.ce = ce;	// Eintragen der CalculatorEngine				/* Basislayout ist ein Borderlayout, in der Mitte ("Center") die Zahlen		und Operationstasten. Rechts ("East") angeordnet die Spezialtasten */		setLayout( new BorderLayout( 4, 4 ) );				/* Setzen der Spezialtasten. Hierzu wird ein Panel erzeugt, welches		ein GridLayout mit zwei Zeilen enthŠlt. Dort hinein kommen die		beiden Spezialtasten */		Panel p1 = new Panel();		p1.setLayout( new GridLayout( 2, 1, 4, 4 ) );		add( "East", p1 );		bClr = initAndAddToPanel( new Button( "C" ), Color.orange, p1 );		bClc = initAndAddToPanel( new Button( "="), Color.green, p1 );				/*Setzen der Zahlen- und Operationstasten. Hierzu wird ein Panel		erzeugt, welche ein GridLayout mit 4 Zeilen und 4 Spalten enthŠlt.		In dieses Grid kommen die 16 Zahlen und Operationstasten */		Panel p2 = new Panel();		p2.setLayout( new GridLayout( 4, 4, 4, 4 ) );		add( "Center", p2 );				/* hinzufŸgen der Tasten der 1. Zeile des Tastenfeldes */		b1 = initAndAddToPanel( new Button( "1" ), Color.white, p2 );		b2 = initAndAddToPanel( new Button( "2" ), Color.white, p2 );		b3 = initAndAddToPanel( new Button( "3" ), Color.white, p2 );		bAdd = initAndAddToPanel( new Button( Op.Add().asString()), Color.cyan, p2 );		/* hinzufŸgen der Tasten der 2. Zeile des Tastenfeldes */				b4 = initAndAddToPanel( new Button( "4" ), Color.white, p2 );		b5 = initAndAddToPanel( new Button( "5" ), Color.white, p2 );		b6 = initAndAddToPanel( new Button( "6" ), Color.white, p2 );		bSub = initAndAddToPanel( new Button( Op.Subtract().asString()), Color.cyan, p2 );				/* hinzufŸgen der Tasten der 3. Zeile des Tastenfeldes */				b7 = initAndAddToPanel( new Button( "7" ), Color.white, p2 );		b8 = initAndAddToPanel( new Button( "8" ), Color.white, p2 );		b9 = initAndAddToPanel( new Button( "9" ), Color.white, p2 );		bMul = initAndAddToPanel( new Button( Op.Multiply().asString()), Color.cyan, p2 );				/* hinzufŸgen der Tasten der 4. Zeile des Tastenfeldes */				b0 = initAndAddToPanel( new Button( "0" ), Color.white, p2 );		bPnt =  initAndAddToPanel( new Button( "." ), Color.white, p2 );		bNeg = initAndAddToPanel( new Button( Op.Negate().asString()), Color.cyan, p2 );		bDiv = initAndAddToPanel( new Button( Op.Divide().asString()), Color.cyan, p2 );		}		/* Instanzmethoden */		/* 	erste Version: SB, 15.03.1997		letzte Aenderung: SB, 23.03.1997		PRE 	-	POST 	Behandeln der TastendrŸcke und versenden von			entsprechenden Nachrichten an die CalculatorEngine */	public boolean action( Event e, Object arg )		{		/* Tasten 0 - 9 wurde gedrŸckt. Wenn eine solche Taste gedrŸckt		wurde, dann wird das Argument <arg> in einen String Ÿbersetzt und der		CalculatorEngine <ce> mitgeteilt welche Taste gedrŸckt wurde */		if ( e.target == b1 )			{ ce.digit( "1" ); }		else if ( e.target == b2 )			{ ce.digit( "2" ); }		else if ( e.target == b3 )			{ ce.digit( "3" ); }		else if ( e.target == b4 )			{ ce.digit( "4" ); }		else if ( e.target == b5 )			{ ce.digit( "5" ); }		else if ( e.target == b6 )			{ ce.digit( "6" ); }		else if ( e.target == b7 )			{ ce.digit( "7" ); }		else if ( e.target == b8 )			{ ce.digit( "8" ); }		else if ( e.target == b9 )			{ ce.digit( "9" ); }		else if ( e.target == b0 )			{ ce.digit( "0" ); }		/* Dezimalpunkt wurde gedrŸckt. Entsprechende Nachricht geht an		die CalculatorEngine <ce> */		else if ( e.target == bPnt )			{ ce.period(); }		/* Operationstaste wurde gedrŸckt. Wird eine Operationstaste		gedrŸckt, so wird ein entsprechendes Objekt der Klasse Op erzeugt		und der CalculatorEngine <ce> mitgeteilt welche Operation		ausgewŠhlt wurde */		else if ( e.target == bNeg )			{ ce.operation( Op.Negate() ); }		else if ( e.target == bAdd )			{ ce.operation( Op.Add() ); }		else if ( e.target == bSub )			{ ce.operation( Op.Subtract() ); }		else if ( e.target == bMul )			{ ce.operation( Op.Multiply() ); }		else if ( e.target == bDiv )			{ ce.operation( Op.Divide() ); }		/* Spezialtaste wurde gedrŸckt. Entsprechende Nachricht (clear oder		calculate) geht an die CalculatorEngine <ce> */		else if ( e.target == bClc )			{ ce.calculate(); }		else if ( e.target == bClr )			{ ce.clear(); };			return false;		}		/* 	erste Version: SB, 23.03.1997		letzte Aenderung: SB, 24.03.1997		PRE 	aComponent != null und aContainer != null	POST 	Hilfsmethode wird nur bei der Objektinitialisierung benštigt und			ist nicht zum externen Gebrauch bestimmt!			Setzt die Hintergrundfarbe von <aComponent> auf <backgroundColor>,			fŸgt <aComponent> zum Container <aContainer> hinzu und antwortet			mit <aComponent> */		private Button initAndAddToPanel( Button aButton, Color backgroundColor, Panel aPanel )		{		aButton.setBackground( backgroundColor );		aPanel.add( aButton );		return aButton;		}			}