Java计算器源代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**********************Java计算器主类*********************/
public class SunnyCalculator implements ActionListener {
   JFrame f;
   JMenu mEdit;
   JMenu mView;
   JMenu mHelp;
   JMenuItem mCopy;
   JMenuItem mPaste;
   JTextField tResult;
   JButton bNumber;
   JButton bOperator;
   JButton bOther;
   JButton bM;
   boolean isDouble=false;//
是否为实数
   int opFlag=-1;
   static double t1=0,t2=0,t3=0,result=0;
   static int opflag1=-1,opflag2=-1,flag=0,resflag=1;
   int preOp,currentOp=0;//
标准位
   double op1=0,op2=0;//
操作数
   double n3;
   StringBuffer buf=new StringBuffer(20);
   StringBuffer copyBoard=new StringBuffer(20);//
剪贴板
   StringBuffer memory=new StringBuffer(20);//M
系列
   StringBuffer str=new StringBuffer();
   //Java
计算器构造器
   public SunnyCalculator()
   {
       f = new JFrame("Sunny
计算器_杨梅树的盔甲");
       Container contentPane =f.getContentPane();
       /**************************Java
计算器菜单的创建*****************************/
       JMenuBar mBar = new JMenuBar();
       mBar.setOpaque(true);
       mEdit = new JMenu("
编辑(E)");
       mEdit.setMnemonic(KeyEvent.VK_E);
       mCopy = new JMenuItem("
复制(C)");
       mEdit.add(mCopy);
       mPaste = new JMenuItem("
粘贴(P)");
       mEdit.add(mPaste);
       mView = new JMenu("
查看(V)");
       mView.setMnemonic(KeyEvent.VK_V);
       mView.add(new JMenuItem("
标准型"));
       mView.add(new JMenuItem("
科学型"));
       mView.addSeparator();
       mView.add(new JMenuItem("
查看分组"));
       mHelp = new JMenu("
帮助(H)");
       mHelp.setMnemonic(KeyEvent.VK_H);
       mHelp.add(new JMenuItem("
帮助主题"));
       mHelp.addSeparator();
       mHelp.add(new JMenuItem("
关于计算器"));
       mBar.add(mEdit);
       mBar.add(mView);
       mBar.add(mHelp);
       f.setJMenuBar(mBar);
       contentPane.setLayout(newBorderLayout());
       JPanel pTop = new JPanel();
       tResult = newJTextField("0.",26);
       tResult.setHorizontalAlignment(JTextField.RIGHT);
       tResult.setEditable(false);
       pTop.add(tResult);
      contentPane.add(pTop,BorderLayout.NORTH);
       JPanel pBottom = new JPanel();
       pBottom.setLayout(newBorderLayout());
       JPanel pLeft = new JPanel();
       pLeft.setLayout(newGridLayout(5,1,3,3));
       bM = new JButton(" ");
       bM.setEnabled(false);
       pLeft.add(bM);

      /*************************Java计算器功能键定义***************************/
       bOther = new JButton("MC");
       bOther.addActionListener(this);
       bOther.setForeground(Color.red);
       bOther.setMargin(newInsets(3,2,3,2));
       pLeft.add(bOther);

      bOther = new JButton("MR");
       bOther.addActionListener(this);
       bOther.setForeground(Color.red);
       bOther.setMargin(newInsets(3,2,3,2));
       pLeft.add(bOther);

      bOther = new JButton("MS");
       bOther.addActionListener(this);
       bOther.setForeground(Color.red);
       bOther.setMargin(newInsets(3,2,3,2));
       pLeft.add(bOther);

      bOther = new JButton("M+");
       bOther.addActionListener(this);
       bOther.setForeground(Color.red);
       bOther.setMargin(newInsets(3,2,3,2));
       pLeft.add(bOther);

      pBottom.add(pLeft,BorderLayout.WEST);
       JPanel pRight = new JPanel();
       pRight.setLayout(newBorderLayout());
       JPanel pUp = new JPanel();
       pUp.setLayout(newGridLayout(1,3,3,0));

      bOther = new JButton("BackSpace");
       bOther.addActionListener(this);
       bOther.setForeground(Color.red);
       bOther.setMargin(newInsets(3,0,3,5));
       pUp.add(bOther);

      bOther = new JButton("CE");
       bOther.addActionListener(this);
       bOther.setForeground(Color.red);
       pUp.add(bOther);

      bOther = new JButton("C");
       bOther.addActionListener(this);
       bOther.setForeground(Color.red);
       pUp.add(bOther);

      /***************************Java计算器数字键盘区定义**************************/
       JPanel pDown = new JPanel();
       pDown.setLayout(newGridLayout(4,5,3,2));
       bNumber = newJButton("7");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bNumber = newJButton("8");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bNumber = newJButton("9");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bOperator = newJButton("/");
       bOperator.setForeground(Color.red);
       bOperator.addActionListener(this);
       bOperator.setMargin(newInsets(3,0,3,0));
       pDown.add(bOperator);
       bOperator = newJButton("sqrt");
       bOperator.addActionListener(this);
       bOperator.setForeground(Color.red);
       bOperator.setMargin(newInsets(3,0,3,0));
       pDown.add(bOperator);
       bNumber = newJButton("4");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
      bNumber.setHorizontalTextPosition(JButton.LEFT);
       pDown.add(bNumber);
       bNumber = newJButton("5");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bNumber = new JButton("6");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bOperator = newJButton("*");
       bOperator.setForeground(Color.red);
       bOperator.addActionListener(this);
       bOperator.setMargin(newInsets(3,3,3,3));
       pDown.add(bOperator);
       bOperator = newJButton("%");
       bOperator.setForeground(Color.blue);
       bOperator.addActionListener(this);
       bOperator.setMargin(newInsets(3,3,3,3));
       pDown.add(bOperator);
       bNumber = newJButton("1");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bNumber = newJButton("2");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bNumber = newJButton("3");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bOperator = newJButton("-");
       bOperator.setForeground(Color.red);
       bOperator.addActionListener(this);
       bOperator.setMargin(newInsets(3,3,3,3));
       pDown.add(bOperator);
       bOperator = newJButton("1/x");
       bOperator.setForeground(Color.blue);
       bOperator.addActionListener(this);
       pDown.add(bOperator);
       bNumber = newJButton("0");
       bNumber.setForeground(Color.blue);
       bNumber.addActionListener(this);
       bNumber.setMargin(newInsets(3,3,3,3));
       pDown.add(bNumber);
       bOperator = newJButton("+/-");
       bOperator.setForeground(Color.blue);
       bOperator.addActionListener(this);
       bOperator.setMargin(newInsets(3,3,3,3));
       pDown.add(bOperator);
       bOperator = newJButton(".");
       bOperator.setForeground(Color.blue);
       bOperator.addActionListener(this);
       bOperator.setMargin(newInsets(3,3,3,3));
       pDown.add(bOperator);
       bOperator = newJButton("+");
       bOperator.setForeground(Color.blue);
       bOperator.addActionListener(this);
       bOperator.setMargin(new Insets(3,3,3,3));
       pDown.add(bOperator);
       bOperator = newJButton("=");
       bOperator.setForeground(Color.blue);
       bOperator.addActionListener(this);
       bOperator.setMargin(newInsets(3,3,3,3));
       pDown.add(bOperator);
       pRight.add(pUp,BorderLayout.NORTH);
      pRight.add(pDown,BorderLayout.SOUTH);
      pBottom.add(pRight,BorderLayout.EAST);
      contentPane.add(pBottom,BorderLayout.SOUTH);
       f.setSize(new Dimension(320,256));
       f.setResizable(false);
       f.setVisible(true);
       f.addWindowListener(newWindowAdapter()
       {
           public voidwindowClosing(WindowEvent e)
           {
              System.exit(0);
           }
       }
       );
   }
   /************************Java
计算器计算方法区***************************/
   public void actionPerformed(ActionEvent e)
   {
       String s = e.getActionCommand();
       if(s.equals("
复制(C)"))
       {
           String temp= tResult.getText().trim();
          copyBoard.replace(0, copyBoard.length(), temp);
          mPaste.setEnabled(true);
       }
       else if(s.equals("
粘贴(p)"))
       {
          tResult.setText(copyBoard.toString());
       }
       else if(s.equals("CE"))
       {
           //
如果是CE则清除文本框
          tResult.setText("0.");
       }
       elseif(s.equals("BackSpace"))
       {
          if(!tResult.getText().trim().equals("0."))
           {
              //
如果文本框中有内容
              if(str.length()!=1 && str.length()!=0)
              {
                  tResult.setText(str.delete(str.length()-1,str.length()).toString());
              }
              else
              {
                  tResult.setText("0.");
                  str.setLength(0);
              }
           }
           op2 =Double.parseDouble(tResult.getText().trim());
       }
       else if(s.equals("C"))
       {
           //
如果是C删除当前计算
          tResult.setText("0.");
           op1 = op2 =0;
          str.replace(0, str.length(), " ");
           preOp =currentOp = 0;
       }
       else if(s.equals("MC"))
       {
           //
如果是MC则清除缓冲区
           String temp= "";
          memory.replace(0, memory.length(), temp);
          bM.setText(" ");
       }
       else if(s.equals("MR"))
       {
           //
如果按键为MR则恢复缓冲区的数到文本框
          tResult.setText(memory.toString());
       }
       else if(s.equals("MS"))
       {
           //
如果按键为MS则将文本框的数存入缓冲区
           String s1 =tResult.getText().trim();
           memory.replace(0,memory.length(), s1);
          bM.setText("M");
       }
       else if(s.equals("M+"))
       {
           //
如果按键为MS则将文本框值与缓冲区的数相加但不显示结果
           String temp1= tResult.getText().trim();
           double dtemp= Double.parseDouble(temp1);
           String temp2= memory.toString();
           dtemp +=Double.parseDouble(temp2);
           temp1 =String.valueOf(dtemp);
          memory.replace(0, memory.length(), temp1);
       }
       else if(s.equals("1/x"))
       {
           //
如果按键为1/x则将文本框中的数据为它的倒数
           String temp= tResult.getText().trim();
           double dtemp= Double.parseDouble(temp);
          tResult.setText(""+1/dtemp);
       }
       else if(s.equals("sqrt"))
       {
           //
如果按键为sqrt则将文本框中的内容求平方根
           String temp= tResult.getText().trim();
           double dtemp= Double.parseDouble(temp);
          tResult.setText(""+Math.sqrt(dtemp));
       }
       else if(s.equals("+"))
       {
          str.setLength(0);
          if(currentOp==0)
           {
              preOp = currentOp = 1;
              op2 = 0;
              tResult.setText(""+op1);
           }
           else
           {
              currentOp = preOp;
              preOp = 1;
              switch(currentOp){
              case 1:
                  op1 += op2;
                  tResult.setText(""+op1);
                  break;
              case 2:
                  op1 -= op2;
                  tResult.setText(""+op1);
                  break;
              case 3:
                  op1 *= op2;
                  tResult.setText(""+op1);
                  break;
              case 4:
                  op1 /= op2;
                  tResult.setText(""+op1);
                  break;
              }
           }
       }
       else if(s.equals("-")){
          str.setLength(0);
          if(currentOp==0)
           {
              preOp=currentOp=2;//op1=op2;op2=0;
              tResult.setText(""+op1);
           }
           else
           {
              currentOp =preOp;
              preOp =2;
              switch(currentOp){
case 1:op1=op1+op2;tResult.setText(""+op1);break;
case 2:op1=op1-op2;tResult.setText(""+op1);break;
case 3:op1=op1*op2;tResult.setText(""+op1);break;
case 4:op1=op1/op2;tResult.setText(""+op1);break;
              }
           }
       }
       else if(s.equals("*"))//*
       {
          str.setLength(0);
          if(currentOp==0)
           {
              preOp=currentOp=3;//op1=op2;op2=1;
              tResult.setText(""+op1);//op1=op2;
           }
           else
           {
              currentOp =preOp;
              preOp =3;
              switch(currentOp){
case 1:op1=op1+op2;tResult.setText(""+op1);break;
case 2:op1=op1-op2;tResult.setText(""+op1);break;
case 3:op1=op1*op2;tResult.setText(""+op1);break;
case 4:op1=op1/op2;tResult.setText(""+op1);break;
              }
           }
       }
       else if(s.equals("/"))// /
       {
          str.setLength(0);
          if(currentOp==0)
           {
              preOp=currentOp=4;//op2=1;
              tResult.setText(""+op1);//op1=op2;
           }
           else
           {
              currentOp =preOp;
              preOp =4;
              switch(currentOp){
case 1:op1=op1+op2;tResult.setText(""+op1);break;
case 2:op1=op1-op2;tResult.setText(""+op1);break;
case 3:op1=op1*op2;tResult.setText(""+op1);break;
case 4:op1=op1/op2;tResult.setText(""+op1);break;
              }
           }
       }
       else if(s.equals("="))// =
       {
          if(currentOp==0)
           {
              str.setLength(0);
              tResult.setText(""+op2);
           }
           else
           {
              str.setLength(0);
              currentOp =preOp;
              switch(currentOp){
case 1:op1=op1+op2;tResult.setText(""+op1);break;
case 2:op1=op1-op2;tResult.setText(""+op1);break;
case 3:op1=op1*op2;tResult.setText(""+op1);break;
case 4:op1=op1/op2;tResult.setText(""+op1);break;
              }
              currentOp=0;
              op2=0;
           }
       }
       else if(s.equals("."))
       {
          isDouble=true;
          if(tResult.getText().trim().indexOf('.')!=-1);
           else {
              if(tResult.getText().trim().equals("0")) {
                  str.setLength(0);
                  tResult.setText((str.append("0"+s)).toString());
              }
              //else if(tResult.getText().trim().equals("")){}//
如果初时显示为空则不做任何操作
              else {
                  tResult.setText((str.append(s)).toString());
              }
           }
       }
       else if(s.equals("0"))//
如果选择的是"0"这个数字键
       {
          if(tResult.getText().trim().equals("0.")){}
           else{
              tResult.setText(str.append(s).toString());
              op2=Double.parseDouble(tResult.getText().trim());
           }
       }
       else{
          tResult.setText(str.append(s).toString());
          op2=Double.parseDouble(tResult.getText().trim());
          if(currentOp==0)
              op1=op2;
       }
   }//end actionPerformed
   public static void main(String[] args) {
       new SunnyCalculator();
   }
}