Java计算器

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

//calculator
public class Calculator extends JFrame{
  public Calculator(){
    setTitle("计算器");
    Container con=getContentPane();
    con.add(new CalPanel());
    setSize(250,250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
  }
 
  public static void main(String args[]){
    new Calculator();
  }
}

class CalPanel extends JPanel implements ActionListener{
  JTextField txt;
  JButton [] jb=new JButton[10];
  JButton jbadd,jbreduce,jbride,jbdivide,jbequal;
  JButton jbcancel,jbsign,jbpoint;
  int pointF=0;
  int signF=0;
  double temp1,temp2;
  boolean f=true;
  char ch='/0';

  public CalPanel(){
     //初始化
     txt=new JTextField("0");
     txt.setHorizontalAlignment(JTextField.RIGHT);
     txt.setEditable(false);
     txt.setBackground(Color.PINK);
     txt.setForeground(Color.blue);
     txt.addKeyListener(new MyKeyAdapter());
 
     addKeyListener(new MyKeyAdapter());

     jbadd=new JButton("+");
     jbadd.addActionListener(this);
     jbadd.addKeyListener(new MyKeyAdapter());

     jbreduce=new JButton("-");
     jbreduce.addActionListener(this);
     jbreduce.addKeyListener(new MyKeyAdapter());
  
     jbride=new JButton("*");
     jbride.addActionListener(this);
     jbride.addKeyListener(new MyKeyAdapter());

     jbdivide=new JButton("/");
     jbdivide.addActionListener(this);
     jbdivide.addKeyListener(new MyKeyAdapter());

     jbequal=new JButton("=");
     jbequal.addActionListener(this);
     jbequal.addKeyListener(new MyKeyAdapter());

     jbcancel=new JButton("C");
     jbcancel.addActionListener(this);
     jbcancel.addKeyListener(new MyKeyAdapter());

     jbsign=new JButton("+/-");
     jbsign.addActionListener(this);
     jbsign.addKeyListener(new MyKeyAdapter());

     jbpoint=new JButton(".");
     jbpoint.addActionListener(this);
     jbpoint.addKeyListener(new MyKeyAdapter());

     for(int i=0;i<10;i++){
       jb[i]=new JButton(i+"");
       jb[i].addActionListener(this);
       jb[i].addKeyListener(new MyKeyAdapter());
     }

     setLayout(new BorderLayout());
     JPanel p=new JPanel();
     add(txt,BorderLayout.NORTH);
     add(p);
     p.setLayout(new GridLayout(5,4));
     p.add(new JLabel(""));
     p.add(new JLabel(""));
     p.add(jbsign);
     p.add(jbcancel);
     p.add(jb[7]);
     p.add(jb[8]);
     p.add(jb[9]);
     p.add(jbdivide);
     p.add(jb[4]);
     p.add(jb[5]);
     p.add(jb[6]);
     p.add(jbride);
     p.add(jb[1]);
     p.add(jb[2]);
     p.add(jb[3]);
     p.add(jbreduce);
     p.add(jb[0]);
     p.add(jbpoint);
     p.add(jbequal);
     p.add(jbadd);
  }
 
  //按钮事件
  public void actionPerformed(ActionEvent e){
    //小数点
    if(e.getSource()==jbpoint){
      if(pointF==0){
        pointF=1;
        txt.setText(txt.getText()+".");
      }
    }
    else if(e.getSource()==jbcancel){    //清除C
      txt.setText("0");
      pointF=0;
      temp1=0;
      f=true;
      signF=0;
      ch='/0';
    }
    else if(e.getSource()==jbsign){     //符号
      if(signF==0){
        if(!txt.getText().equals("0")){
          txt.setText("-"+txt.getText());
          signF=1;
        }
      }
      else{
        signF=0;
        txt.setText(txt.getText().substring(1,txt.getText().length()));
      }
    }
    else if(e.getSource()==jbequal){    //等号
      switch(ch){
        case '+':
          txt.setText(Add(temp1,Double.parseDouble(txt.getText()))+"");
          temp1=Double.parseDouble(txt.getText());
          break;
        case '-':
          txt.setText(Reduce(temp1,Double.parseDouble(txt.getText()))+"");
          temp1=Double.parseDouble(txt.getText());
          break;
        case '*':
          txt.setText(Ride(temp1,Double.parseDouble(txt.getText()))+"");
          temp1=Double.parseDouble(txt.getText());
          break;
        case '/':
          if(Double.parseDouble(txt.getText())==0){
            txt.setText("除数不能为0");
            break;
          }
          txt.setText(Divide(temp1,Double.parseDouble(txt.getText()))+"");
          temp1=Double.parseDouble(txt.getText());
          break;
      }
    }
    else if(e.getSource()==jbadd){     //加号
      temp1=Double.parseDouble(txt.getText());
      f=false;
      ch='+';
      signF=0;
      pointF=0;
    }
    else if(e.getSource()==jbreduce){    //减号
      temp1=Double.parseDouble(txt.getText());
      f=false;
      ch='-';
      signF=0;
      pointF=0;
    }
    else if(e.getSource()==jbride){    //乘号
      temp1=Double.parseDouble(txt.getText());
      f=false;
      ch='*';
      signF=0;
      pointF=0;
    }
    else if(e.getSource()==jbdivide){    //除号
      temp1=Double.parseDouble(txt.getText());
      f=false;
      ch='/';
      signF=0;
      pointF=0;
    }
    else{       //数字
      for(int i=0;i<10;i++){
        if(e.getSource()==jb[i]){
          if(!f){
            txt.setText("0");
            f=true;
          }
          txt.setText(txt.getText()+jb[i].getText());
          if(pointF==0 && txt.getText().substring(0,1).equals("0")){
            txt.setText(jb[i].getText());
          }
        }
      }
    }
  }
 
  //加法
  public double Add(double a,double b){
    return (a+b);
  }
 
  //减法
  public double Reduce(double a,double b){
    return (a-b);
  }
 
  //乘法
  public double Ride(double a,double b){
    return (a*b);
  }
 
  //除发
  public double Divide(double a,double b){
    return(a/b);
  }

  private class MyKeyAdapter extends KeyAdapter{
    public void keyPressed(KeyEvent e){
      //清除
      if(e.getKeyCode()==27){
        txt.setText("0");
        pointF=0;
        temp1=0;
        f=true;
        signF=0;
        ch='/0';
      }
      //回车
      if(e.getKeyCode()==10){
        switch(ch){
          case '+':
            txt.setText(Add(temp1,Double.parseDouble(txt.getText()))+"");
            temp1=Double.parseDouble(txt.getText());
            break;
          case '-':
            txt.setText(Reduce(temp1,Double.parseDouble(txt.getText()))+"");
            temp1=Double.parseDouble(txt.getText());
            break;
          case '*':
            txt.setText(Ride(temp1,Double.parseDouble(txt.getText()))+"");
            temp1=Double.parseDouble(txt.getText());
            break;
          case '/':
            if(Double.parseDouble(txt.getText())==0){
              txt.setText("除数不能为0");
              break;
            }
            txt.setText(Divide(temp1,Double.parseDouble(txt.getText()))+"");
            temp1=Double.parseDouble(txt.getText());
            break;
        }
      }
    }
    public void keyTyped(KeyEvent e){
      //数字
      if(e.getKeyChar()>='0' && e.getKeyChar()<='9'){
        for(int i=0;i<10;i++){
          if(e.getKeyChar()==jb[i].getText().charAt(0)){
            if(!f){
              txt.setText("0");
              f=true;
            }
            txt.setText(txt.getText()+jb[i].getText());
            if(pointF==0 && txt.getText().substring(0,1).equals("0")){
              txt.setText(jb[i].getText());
            }
          }
        }
      }
        
      //运算符
      //小数点
      if(e.getKeyChar()=='.'){
        if(pointF==0){
          pointF=1;
          txt.setText(txt.getText()+".");
        }
      }
      //加号
      if(e.getKeyChar()=='+'){
        temp1=Double.parseDouble(txt.getText());
        f=false;
        ch='+';
        signF=0;
        pointF=0;
      }
      //减号
      if(e.getKeyChar()=='-'){
        temp1=Double.parseDouble(txt.getText());
        f=false;
        ch='-';
        signF=0;
        pointF=0;
      }
      //乘号
      if(e.getKeyChar()=='*'){
        temp1=Double.parseDouble(txt.getText());
        f=false;
        ch='*';
        signF=0;
        pointF=0;
      }
      //除号
      if(e.getKeyChar()=='/'){
        temp1=Double.parseDouble(txt.getText());
        f=false;
        ch='/';
        signF=0;
        pointF=0;
      }
    }
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值