JAVA简单计算器

 
  1. package calculator;
  2. import java.awt.BorderLayout;
  3. import java.awt.Color;
  4. import java.awt.FlowLayout;
  5. import java.awt.GridLayout;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import javax.swing.JButton;
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTextField;
  12. public class JavaCalculator implements ActionListener{
  13.     private JFrame frame;
  14.     private JTextField field;
  15.     private JButton clear;
  16.     private JButton[] allButtons;
  17.     private double number1=0.0,number2=0.0;
  18.     private String operator;
  19.     int index = 0;//记录文本框中输入的小数点个数
  20.     
  21.     public JavaCalculator(){
  22.         frame=new JFrame("计算器v1.0");
  23.         field=new JTextField(20);
  24.         field.setForeground(Color.RED);
  25.         clear=new JButton("C");
  26.         clear.setBackground(Color.CYAN);
  27.         allButtons=new JButton[16];
  28.         String str="123+456-789*0.=/";
  29.         for(int i=0;i<allButtons.length;i++){//生成主界面数组按钮
  30.             allButtons[i]=new JButton(str.charAt(i)+"");
  31.         }
  32.         init();
  33.         setColor();
  34.         addEventHandler();
  35.     }
  36.     
  37.     private void init(){
  38.         JPanel north=new JPanel();
  39.         JPanel center=new JPanel();
  40.         
  41.         north.setLayout(new FlowLayout());
  42.         center.setLayout(new GridLayout(4,4));
  43.         
  44.         north.add(field);
  45.         north.add(clear);
  46. //      将按钮数组添加入网格布局管理器中        
  47.         for(int i=0;i<allButtons.length;i++){
  48.             center.add(allButtons[i]);
  49.         }
  50.         
  51.         frame.setLayout(new BorderLayout());
  52.         frame.add(north,BorderLayout.NORTH);
  53.         frame.add(center,BorderLayout.CENTER);
  54.     }
  55.     
  56.     private void setColor(){
  57.         for(int i=0;i<allButtons.length;i++){
  58.             allButtons[i].setBackground(i%2==0?Color.GREEN:Color.YELLOW);
  59.         }
  60.     }
  61.     
  62.     public void showMe(){
  63.         frame.pack();
  64.         frame.setLocation(300,300);
  65.         frame.setVisible(true);
  66.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  67.     }
  68.     
  69.     public void addEventHandler(){
  70.         for(int i=0;i<allButtons.length;i++){
  71.             allButtons[i].addActionListener(this);
  72.         }
  73.         clear.addActionListener(this);
  74.     }
  75.     public void actionPerformed(ActionEvent e) {
  76.         String str = e.getActionCommand().trim();//得到与事件对象相关的事件源文本
  77.         Object temp = e.getSource();//保存数据源
  78.         boolean bool = false;//记录文本框中是否为空
  79.         if(field.getText().length() == 0){
  80.               bool = true;
  81.           }
  82.         //if(str.charAt(0)>='0' && str.charAt(0)<='9'){}
  83.           if("0123456789.".indexOf(str)!=-1){
  84.               field.setText(field.getText().trim()+str.charAt(0));  
  85.               //当文本框为空并且按下"."按钮时,输出"0."           
  86.               if(bool == true && temp == allButtons[13] && index == 0){
  87.                   field.setText("0.");
  88.               }
  89.               //按下"."按钮时,判断当前文本框内字符串中含不含".",如果已含,则不允许再插入"."
  90.               for (int i = 0; i < field.getText().length(); i++){
  91.                     if ('.' == field.getText().charAt(i)) {
  92.                       index++;
  93.                       break;
  94.                     }
  95.               }
  96.               if(temp == allButtons[13] && index>1){
  97.                   field.setText("已经有了一个小数点,请您正确输入数字!");
  98.               }
  99.               return;
  100.           }
  101.           if("+-*/".indexOf(str)!=-1){
  102.               //在空文本中输入负数
  103.               if(bool == true && temp == allButtons[7]){
  104.                   field.setText("-");
  105.               }else if(bool == false){
  106.                   number1 = Double.parseDouble(field.getText().trim());
  107.                   operator = str.charAt(0)+"";
  108.                   number2 = number1;
  109.                   field.setText("");
  110. //              index恢复初始值,便于后来进行小数运算
  111.                   index = 0;
  112.               }else{field.setText("ERROR");}
  113.               return;
  114.           }
  115.           //进行"+","-","*","/"运算
  116.           if(str.equals("=")){
  117.               number1 = Double.parseDouble(field.getText().trim());
  118.               if(operator.trim().equals("+")){
  119.                   double d = number2+number1;
  120.                   field.setText(d+"");
  121.               }else if(operator.trim().equals("-")){
  122.                   double d = number2-number1;
  123.                   field.setText(d+"");
  124.               }else if(operator.trim().equals("*")){
  125.                   double d = number2*number1;
  126.                   field.setText(d+"");
  127.               }else if(operator.trim().equals("/")){
  128.                   //除数不能为零
  129.                   if(number1 == 0){
  130.                      field.setText("ERROR");
  131.                   }else{
  132.                      double d = number2/number1;
  133.                      field.setText(d+"");  
  134.                   }
  135.               }else{
  136.                   field.setText("ERROR!");
  137.               }
  138.               
  139.           }
  140.           //清除键
  141.           if(str.equals("C")){
  142.               field.setText("");
  143.               operator="";
  144.               index = 0;
  145.           }
  146.     }
  147.     public static void main(String[] args){
  148.         new JavaCalculator().showMe();  
  149.     }
  150. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值