Lösung Übung 16: Einfacher Taschenrechner

// Datei Calculator.java


import java.awt.*;
import java.awt.event.*;


public class Calculator extends Frame {


	protected TextField anzeigeFeld;
	protected Button[] ziffernButtons;
	
	protected double result;
	protected int nextOperation;
	protected boolean deleteFlag;

	public Calculator() {
		
		addWindowListener( new WindowAdapter() {
			public void windowClosing( WindowEvent e ) {
				System.exit(0);
			}
		});

		result = 0.0;
		nextOperation = -1;
		deleteFlag = true;
						
		anzeigeFeld = new TextField();
		anzeigeFeld.setText( "" + result );
		anzeigeFeld.setEditable(false);
		
		ziffernButtons = new Button[10];
		ZiffernListener zL = new ZiffernListener( this );
		
		for(int i = 0; i < ziffernButtons.length; i++ ) {
			ziffernButtons[i] = new Button( "" + i );
			ziffernButtons[i].addActionListener( zL );
		}
		
		Button kommaButton = new Button( "." );
		kommaButton.addActionListener( zL );
		
		MathListener mL = new MathListener( this );
		
		Button additionButton = new Button( "+" );
		additionButton.addActionListener( mL );
		Button subtraktionButton = new Button( "-" );
		subtraktionButton.addActionListener( mL );
		Button multiplikationButton = new Button( "*" );
		multiplikationButton.addActionListener( mL );
		Button divisionButton = new Button( "/" );
		divisionButton.addActionListener( mL );
		Button resultButton = new Button( "=" );
		resultButton.addActionListener( mL );
		Panel buttonPanel = new Panel();
		buttonPanel.setLayout( new GridLayout(4,4) );
		

		buttonPanel.add( ziffernButtons[1] );
		buttonPanel.add( ziffernButtons[2] );
		buttonPanel.add( ziffernButtons[3] );
		buttonPanel.add( additionButton );
		buttonPanel.add( ziffernButtons[4] );
		buttonPanel.add( ziffernButtons[5] );
		buttonPanel.add( ziffernButtons[6] );
		buttonPanel.add( subtraktionButton );
		buttonPanel.add( ziffernButtons[7] );
		buttonPanel.add( ziffernButtons[8] );
		buttonPanel.add( ziffernButtons[9] );
		buttonPanel.add( multiplikationButton );
		buttonPanel.add( ziffernButtons[0] );
		buttonPanel.add( kommaButton );
		buttonPanel.add( resultButton );
		buttonPanel.add( divisionButton );
		setLayout( new BorderLayout() );		
		add(anzeigeFeld, BorderLayout.NORTH);
		add(buttonPanel, BorderLayout.CENTER);
		
		setSize(200,200);
		setVisible(true);
	}
	
	/**
	*	Der String s wird an den vorhandenen String im anzeigeFeld angehängt.
	*	Diese Methode wird vom ZiffernListener aufgerufen.
	*/
	public void append( String s ) {
		String str = "";
		if( deleteFlag != true )
			str = anzeigeFeld.getText();
		else
			deleteFlag = false;
				
		if( s.equals( "." ) && str.indexOf( '.' ) >= 0 ){
			Toolkit.getDefaultToolkit().beep();
			return;
		}
			
		anzeigeFeld.setText( str + s );
	}
	
	/**
	*	Diese Methode führt alle arithmetischen Operationen aus.
	*	Sie wird vom MathListener aufgerufen.
	*/	
	public void operation( String str ) {
	
		double zahl = 0.0;
		if( str.length() > 0 )
			zahl = Double.parseDouble( anzeigeFeld.getText() );
		
		switch( nextOperation ) {		
			case '+':
				result += zahl;
				break;
			case '-':
				result -= zahl;
				break;
			case '*':
				result *= zahl;
				break;
			case '/':
				if( zahl != 0.0 );
					result /= zahl;
				break;
			default:
				result = zahl;
				break;
		}
		
		anzeigeFeld.setText( "" + result );
		deleteFlag = true;
	
		if( str.charAt(0) == '=' ) {
			if( nextOperation == -1)
				anzeigeFeld.setText( "" + 0.0 );
			nextOperation = -1;
		}
		else	
			nextOperation = str.charAt(0);		
	}
	
	public static void main( String[] args ) {
		new Calculator();
	}
}				

// Datei MathListener.java - ActionListener, der arithmetische Operationen auslöst


import java.awt.event.*;
import java.awt.*;


public class MathListener implements ActionListener {

	protected Calculator calculator;
	
	public MathListener( Calculator c ) {
		calculator = c;
	}
	
	public void actionPerformed( ActionEvent e ) {
	
		Button src = (Button)e.getSource();
		
		calculator.operation( src.getLabel() ); 

	}
	
}
		

// Datei ZiffernListener.java - ActionListener, der Zifferneingaben bearbeitet


import java.awt.event.*;
import java.awt.*;

public class ZiffernListener implements ActionListener {

	protected Calculator calculator;
	
	public ZiffernListener( Calculator c ) {
		calculator = c;
	}
	
	public void actionPerformed( ActionEvent e ) {
	
		Button src = (Button)e.getSource();
		
		calculator.append( src.getLabel() );
	}
	
}


[Index]