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);
  frame.setSize(300,300);//设置框架大小
 }
}class calculatorFrame extends JFrame
{
 public calculatorFrame()
 {
  setTitle("calculator");
//  Container contentPane=getContentPane();
  calculatorPanel panel=new calculatorPanel();//创建面板
//  contentPane.add(panel);
  add(panel);
  pack();
 }
}class calculatorPanel extends JPanel
{
 public calculatorPanel()
 {
  setLayout(new BorderLayout());//创建并设置布局管理器
  result=0;
  lastCommand="=";
  start=true;
  display=new JLabel("0");//创建标签
  add(display,BorderLayout.NORTH);
  ActionListener insert=new InsertAction();
  ActionListener command=new CommandAction();
  panel=new JPanel();
  panel.setLayout(new GridLayout(4,4));
  setBounds(10,10,10,10);
  setSize(300,250);
  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 evt)
  {
   String command=evt.getActionCommand();
   if(start)
   {
    if(command.equals("-"))
    {
     display.setText(command);
     start=false;
    }
    else
       lastCommand=command;
   }
   else
   {
    calculate(Double.parseDouble(display.getText()));
    lastCommand=command;
    start=true;
   }
  }
 }
 
 
 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 JLabel display;
 private JPanel panel;
 private double result;
 private String lastCommand;
 private boolean start;
}
高手帮忙把主要的代码给注释下,我刚学java,这些看不懂

解决方案 »

  1.   


    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);
      frame.setSize(300,300);//设置框架大小
     }    
    }class calculatorFrame extends JFrame
    {
     public calculatorFrame()
     {
      setTitle("calculator");
    //  Container contentPane=getContentPane();
      calculatorPanel panel=new calculatorPanel();//创建面板
    //  contentPane.add(panel);
      add(panel);
      pack();
     }    
    }class calculatorPanel extends JPanel
    {
     public calculatorPanel()
     {
      setLayout(new BorderLayout());//创建并设置布局管理器
      result=0;
      lastCommand="=";
      start=true;
      display=new JLabel("0");//创建标签
      add(display,BorderLayout.NORTH);
    //初始化监听类
      ActionListener insert=new InsertAction();
      ActionListener command=new CommandAction();
      panel=new JPanel();
      panel.setLayout(new GridLayout(4,4));
      setBounds(10,10,10,10);
      setSize(300,250);
    //初始化按钮
      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 evt)
      {
       String command=evt.getActionCommand();
       if(start)
       {
        if(command.equals("-"))
        {
         display.setText(command);
         start=false;    
        }    
        else
           lastCommand=command;
       }    
       else
       {
        calculate(Double.parseDouble(display.getText()));
        lastCommand=command;
        start=true;    
       }
      }    
     }
     
     
     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 JLabel display;
     private JPanel panel;
     private double result;
     private String lastCommand;
     private boolean start;
    }
      

  2.   


    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 evt)
      {
       String command=evt.getActionCommand();
       if(start)
       {
        if(command.equals("-"))
        {
         display.setText(command);
         start=false;    
        }    
        else
           lastCommand=command;
       }    
       else
       {
        calculate(Double.parseDouble(display.getText()));
        lastCommand=command;
        start=true;    
       }
      }    
     }这两段不是很懂,其他的马马虎虎能看懂
      

  3.   

    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);
    frame.setSize(300,300);//设置框架大小
    }    
    }class calculatorFrame extends JFrame
    {
    public calculatorFrame()
    {
    setTitle("calculator");//设置JFrame的标题
    //  Container contentPane=getContentPane();
    calculatorPanel panel=new calculatorPanel();//创建面板
    //  contentPane.add(panel);
    add(panel);
    pack();//将窗口压小
    }    
    }class calculatorPanel extends JPanel
    {
    public calculatorPanel()
    {
    setLayout(new BorderLayout());//创建并设置布局管理器(边框布局)
    result=0;                     //设置初始值为零(保存计算结果)
    lastCommand="=";              //初始保存命令名为”=“
    start=true;                   //设置初始值为TRUE;
    display=new JLabel("0");//创建标签
    add(display,BorderLayout.NORTH);//将标签布局到北方
    ActionListener insert=new InsertAction();//数字键注册insertAction监听
    ActionListener command=new CommandAction();//功能键注册CommandAction监听
    panel=new JPanel();
    panel.setLayout(new GridLayout(4,4));//JPanel设置为网格布局
    setBounds(10,10,10,10);//设置按钮大小
    setSize(300,250);//设置JPane的大小
    addButton("7",insert);//将各个按钮组件加到JPane中,并设置命令名,数字键为insert 功能键为command,实现监听(下面有作者方法addButton())
    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);    //将JPanel设置为JFrame中中心
     }
     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)                                   //初始时start为TRUE,将标签display设置为“”,修改开始状态为FALSE
     {
     display.setText("");
     start=false;    
     }    
     display.setText(display.getText()+input);   //如果按下了数字键(命令名为insert),就将对应的数字键加到标签display后面
     }    
     }
     private class CommandAction implements ActionListener
     {
     public void actionPerformed(ActionEvent evt)   
     {
     String command=evt.getActionCommand();     //获得监听命令名
     if(start)                                  //一开始就按下了功能(也就是说没有按下数字键的时候就按下功能键)
     {
     if(command.equals("-"))                //如果按下功能"-",表示取负数,并将"-"显示到标签display上,修改开始start的状态
     {
     display.setText(command);          
     start=false;    
     }    
     else
     lastCommand=command;               //修改Jpanel中成员变量lastCommand为除"-"其他处功能键的命令名
     }    
     else                                      //开始有其他数字键按下时
     {
     calculate(Double.parseDouble(display.getText()));//调用作者自己写的方法calculate,其中的参数将标签display的内容转化成Double
     lastCommand=command;                    //将lastCommand修改为功能键的命令名,并修改开始标签的值为TRUE
     start=true;    
     }
     }    
     }
     
     
     public void calculate(double x)                    //实现加减乘除等于的功能,并将结果保存到result中
     {
     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);                       //将标签display设置为result
     }
      private JLabel display;                           //用来显示数字键和功能键,结果
      private JPanel panel;
      private double result;
      private String lastCommand;                      //保存功能键的命令名
    private boolean start;                          //start是标志计算器是否有键按下,没有按下的话为TRUE,有按下的话为FALSE
    }
    改程序有很多错误,比如直接输入点号  不能出现0.
                       功能键能够连续输入 +++++++我也是初学者 有什么注释错误  不要见怪  如果觉得还过的去,帮帮我加加分!
      

  4.   

    给你推荐本书,java核心技术,卷1,卷2,一起看,