您的位置:首页 > 编程语言 > Java开发

Java AWT实现的计算器代码

2013-10-10 17:28 393 查看
import java.awt.*;
import java.awt.event.*;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.lang.Integer;
import java.lang.Math;
public class Calculator
{
 private Frame f=new Frame("计算器");
 private Panel p1=new Panel();
 private Panel p2=new Panel();
 private Panel p3=new Panel();
 private TextField ta=new TextField(30);
 
 String[] name={"CE","±","√","/","%","7","8","9","*","1/x","4","5","6","-","+","1","2","3","0","."};
 Button[] buttons=new Button[name.length];
 Button bt=new Button("=");
//num1存放第一个运算数;num2存放第二个运算数,并用于每次从TextField ta里取出新输入的数
//operator用于存放输入的运算符 
 double num1=0.0;
 double num2=0.0;
 String operator="=";
 
 public void init()
 {
  
  //向p1中加入TextField
  p1.add(ta);
  f.add(p1,BorderLayout.NORTH);
  p2.setLayout(new GridLayout(4,5,4,4));
  //向p2中依次添加20个按钮
  for(int i=0;i<name.length;i++)
  {
   buttons[i]=new Button(name[i]);
   p2.add(buttons[i]);
  }
  
  ActionListener btListener=new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    System.out.println("command is:"+e.getActionCommand());
    //定义正则表达式m1,用于匹配数字或者浮点数
    Matcher m1=Pattern.compile("\\d|\\.").matcher(e.getActionCommand());
  
    //当按 的按钮是“CE”时
    if(e.getActionCommand().equals("CE"))
    {
     ta.setText("");
    }
    /*当按的按钮是数字或带小数点的浮点数时,把按的数字显示在TextField ta中,把ta上显示的数字字符串转换成double数字赋给num2*/
    else if(m1.matches())
    {
        ta.setText(ta.getText()+e.getActionCommand());
        num2=Double.parseDouble(ta.getText());
       
    }
    /*当按的按钮是运算符时,num1记录第一个运算数,num2记录第二个运算数。operator用于存放新按的运算符,operator中原始存放的运算符为“=”,所以每次将新运算符放人operator之前,要不operator中已存放的运算符弹出,让num1和num2做刚弹出的运算符的运算,运算结果存入num1。弹出operator中已有运算符后,将新运算符放人operator中*/
    else
    { 
     /*"√"、"±"、"1/x"这三个单目运算符都是放在数字后面使用,改变都是输入的数字的值,即num2的值*/
     if((ta.getText()+e.getActionCommand()).endsWith("√"))
     {
      num2=Double.parseDouble(ta.getText());
      num2=Math.sqrt(num2);
      if (operator.equals("="))
      {
       num1=num2;
      }
      else if(!operator.equals("="))
      {
       handleoperator(operator);
      }
     }
     else if((ta.getText()+e.getActionCommand()).endsWith("±"))
     {
      num2=Double.parseDouble(ta.getText());
      num2=-num2;
      if(operator.equals("="))
      {
       num1=num2;
      }
      else if(!operator.equals("="))
      {
       handleoperator(operator);
      }
     }
     else if((ta.getText()+e.getActionCommand()).endsWith("1/x"))
     {
      num2=Double.parseDouble(ta.getText());
      num2=1/num2;
      if(operator.equals("="))
      {
       num1=num2;
      }
      else if(!operator.equals("="))
      {
       handleoperator(operator);
      }
     }
     else if (operator.equals("="))
     {
      num1=Double.parseDouble(ta.getText());
     }
     else if(!operator.equals("="))
     {
      handleoperator(operator);
     }
     
     operator=e.getActionCommand();
     
     ta.setText("");
    }
   
    if(e.getActionCommand().equals("="))
    {
     ta.setText(""+num1);
    }
    
   }
  };
  
  for(int i=0;i<buttons.length;i++)
  {
   buttons[i].addActionListener(btListener);
  }
  bt.addActionListener(btListener);
  
  f.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    System.exit(0);
   }
  });
  //将“=”按钮单独放在p3里,放在最后一行
  p3.add(bt);
  f.add(p2,BorderLayout.CENTER);
  f.add(p3,BorderLayout.SOUTH);
  f.pack();
  f.setVisible(true);
 }
 /** handleoperator()方法处理 operator中存放有“+”,“-”,“*”,"/","%","√" 运算符的时候**/
 public void handleoperator(String operator)
  {
   if(operator.equals("+"))
   {
    num1+=num2;
   }
   else if(operator.equals("-"))
   {
    num1-=num2;
   }
   else if(operator.equals("*"))
   {
    num1*=num2;
   }
   else if(operator.equals("/"))
   {
    if(num2==0.0)
    {
     System.out.println("除数不能为零!");
    }
    else
    {
     num1/=num2;
    }
   }
   else if(operator.equals("%"))
   {
    if(num2==0.0)
    {
     System.out.println("除数不能为零!");
    }
    else
    {
     num1%=num2;
    }
   }
   else if(operator.equals("√"))
   {
        
   }
  }
 public static void main(String[] args)
 {
  new Calculator().init();
 }
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: