问题参夹在代码中.....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;
         }
      }
   }
     
   //下面这个方法计算用来计算..我试了一下,输入数字后,再按一下+-*/其中一个命令键,就会把输入的数字改为DOUBLE类型后显示,问题是好象
      RESULT 被初始化为0, 所以result(+-*/)=x这样的式子得出的结果显示不应该是原数吧???但在计算器上的是正确的...

    public void calculate(double x)
  {
      if (lastCommand.equals("+")) result += x;
      else if (lastCommand.equals("-")) result -= x;
      else if (lastCommand.equals("*")) result *= x;
      else if (lastCommand.equals("/")) result /= x;
      else if (lastCommand.equals("=")) result = x;
      display.setText("" + result);
   }
   
   private JButton display;
   //JButton 定义的不是一个按键吗??怎么显示在计算器上的不是??高手帮分析下原理   
   private JPanel panel;
   private double result;
   private String lastCommand;
   private boolean start;
}

解决方案 »

  1.   

    "result(+-*/)=x这样的式子得出的结果显示不应该是原数吧???"
        表达式相当于result = result +-*/ x 这样子得到的结果怎么会是原数呢? 
    JButton   定义的不是一个按键吗??怎么显示在计算器上的不是??//
                display是一个JButton.本来按键显示的时候应该是浅蓝色的,
     然后在你的程序中用  display.setEnabled(false); 把按键给禁用了,看起来就是灰色的。
     LZ把这句给注释掉再看下结果
      

  2.   

    "result(+-*/)=x这样的式子得出的结果显示不应该是原数吧??? " 
            表达式相当于result   =   result   +-*/   x   这样子得到的结果怎么会是原数呢? 
    ....................................................................................................................LS的朋友,我的疑问就在于此啊...因为不可能是原数...而显示的时候是以原数输出的,我想知道怎么是这样??
      

  3.   

    当你用选择+-*/时,才会执行result(+-*/)=x!也就是计算两个数的结果
    比如:3 + 6 = 9.0。在你的程序中不是显示9.0的吗?这样子得到的结果怎么会象LZ说的“显示的时候是以原数输出的”
      

  4.   

    3 + 3的执行过程:     由于start的初始值为true,所以按下3后,会调用InsertAction 的actionPerformed.并执行if (start) 里面的内容,执行完if后, start 被设置为false; 然后再执行 display.setText(display.getText()   +   input); 也就是把所按的键3显示在display中;
         当按下+后,会调用CommandAction 的actionPerformed。执行command=event.getActionCommand(); 此时,command为“+”,接着,由于此时的start为false,所以执行else语块,
    calculate(Double.parseDouble(display.getText())); 即执行calculate(3.0);调用calculate方法,
    由于初始化的时候lastCommand   =   "= "; 所以执行的是 (lastCommand.equals( "= ")) result   =   x; 即初始化result的值为3.0,接着再执行
                lastCommand   =   command; 即command的值为“+”
              tart   =   true; 再次把start设为true其它的省略,LZ要弄清的是lastCommand的初始值是lastCommand   =   "= ";