// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski. Copyright (c) 1997 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.awt.*;
import java.applet.*;
public class JavaCalc extends Applet {
Label lab;
boolean firstDigit = true;
float savedValue = 0.0f; // Initial value
String operator = "="; // Initial operator
public void addButtons (Panel p, String labels) {
int count = labels.length();
for (int i=0;i<count;i++)
p.add (new Button (labels.substring(i,i+1)));
}
public void init () {
setLayout (new BorderLayout());
add ("North", lab = new Label ("0", Label.RIGHT));
Panel p = new Panel();
p.setLayout (new GridLayout (4, 4));
addButtons (p, "789/");
addButtons (p, "456*");
addButtons (p, "123-");
addButtons (p, ".0=+");
add ("Center", p);
}
public boolean action (Event e, Object o) {
if (e.target instanceof Button) {
String s = (String)o;
if ("0123456789.".indexOf (s) != -1) { // isDigit
if (firstDigit) {
firstDigit = false;
lab.setText (s);
} else {
lab.setText (lab.getText() + s);
}
} else { // isOperator
if (!firstDigit) {
compute (lab.getText());
firstDigit = true;
}
operator = s;
}
return true;
}
return false;
}
public void compute (String s) {
float sValue = new Float (s).floatValue();
char c = operator.charAt (0);
switch (c) {
case '=': savedValue = sValue;
break;
case '+': savedValue += sValue;
break;
case '-': savedValue -= sValue;
break;
case '*': savedValue *= sValue;
break;
case '/': savedValue /= sValue;
break;
}
lab.setText (String.valueOf(savedValue));
}
}
|