日期:2014-05-20  浏览次数:20658 次

帮忙分析一下书上的这个计算器算法...有些疑问
问题参夹在代码中.....

package v1ch9.Calculator;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator
{
  public static void main(String[] args)
  {  
  CalculatorFrame frame = new CalculatorFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);
  }
}

class CalculatorFrame extends JFrame
{
  public CalculatorFrame()
  {
  setTitle("Calculator");
  CalculatorPanel panel = new CalculatorPanel();
  add(panel);
  pack();
  }
}

class CalculatorPanel extends JPanel
{  
  public CalculatorPanel()
  {  
  setLayout(new BorderLayout());

  result = 0;
  lastCommand = "=";
  start = true;
   
  // add the display

  display = new JButton("0");
  display.setEnabled(false);
  add(display, BorderLayout.NORTH);
   
  ActionListener insert = new InsertAction();
  ActionListener command = new CommandAction();

  // add the buttons in a 4 x 4 grid

  panel = new JPanel();
  panel.setLayout(new GridLayout(4, 4));

  addButton("7", insert);
  addButton("8", insert);
  addButton("9", insert);
  addButton("/", command);

  addButton("4", insert);
  addButton("5", insert);
  addButton("6", insert);
  addButton("*", command);

  addButton("1", insert);
  addButton("2", insert);
  addButton("3", insert);
  addButton("-", command);

  addButton("0", insert);
  addButton(".", insert);
  addButton("=", command);
  addButton("+", command);

  add(panel, BorderLayout.CENTER);
  }

  private void addButton(String label, ActionListener listener)
  {  
  JButton button = new JButton(label);
  button.addActionListener(listener);
  panel.add(button);
  }

  private class InsertAction implements ActionListener
  {
  public void actionPerformed(ActionEvent event)
  {
  String input = event.getActionCommand();
  if (start) 
  {
  display.setText("");
  start = false;
  }
  display.setText(display.getText() + input);
  }
  }
  private class CommandAction implements ActionListener
  {
  public void actionPerformed(ActionEvent event)
  {  
  String command = event.getActionCommand();

  if (start)
  {  
  if (command.equals("-")) 
  { 
  display.setText(command); 
  start = false; 
  }
  else 
  lastCommand = command;
  }
  else
  {  
  calculate(Double.parseDouble(display.getText()));
  lastCommand = command;
  start = true;