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]