5.4 A Simple CalculatorIt is always helpful to see complete and somewhat useful examples after learning something new. Example 5.2 shows a working calculator that performs floating point addition, subtraction, multiplication, and division. Figure 5.4 shows the calculator in operation. The button in the lower left corner is a decimal point. This applet uses a number of classes that will be discussed later in the book (most notably, some layout managers and a Panel); try to ignore them for now. Focus on the action() and compute() methods; action() figures out which button was pressed, converting it to a digit (0-9 plus the decimal point) or an operator (=, +, -, *, /). As you build a number, it is displayed in the label lab, which conveniently serves to store the number in string form. The compute() method reads the label's text, converts it to a floating point number, does the computation, and displays the result in the label. The addButtons() method is a helper method to create a group of Button objects at one time. Example 5.2: Calculator Source Code
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)); } } |
|