package caculatot;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class MyCalculater extends JFrame implements ActionListener{private static final long serialVersionUID = 1L;//不管他
    JPanel mainpanel = new JPanel();        //主面板
JPanel centerpanel = new JPanel();      //中心面板
JTextField txt = new JTextField("");    //主显示区
StringBuffer sb1 = new StringBuffer(); //参数一
StringBuffer sb2 = new StringBuffer(); //参数二
char sign;boolean flag = false;JButton[] buttons = new JButton[16];
{
   buttons[0] = new JButton("1"); 
   buttons[1] = new JButton("2");
   buttons[2] = new JButton("3");
   buttons[3] = new JButton("+");
   buttons[4] = new JButton("4");
   buttons[5] = new JButton("5");
   buttons[6] = new JButton("6");
   buttons[7] = new JButton("-");
   buttons[8] = new JButton("7");
   buttons[9] = new JButton("8");
   buttons[10] = new JButton("9");  
   buttons[11] = new JButton("*");
   buttons[12] = new JButton("0");
   buttons[13] = new JButton("c");
   buttons[14] = new JButton("=");
   buttons[15] = new JButton("/"); 
}
{
   centerpanel.setLayout(new GridLayout(4,4,8,8));
   for (int i = 0; i < buttons.length; i++) {
    centerpanel.add(buttons[i]);
    buttons[i].addActionListener(this);
   }
}public MyCalculater(int x,int y) {
   this.setTitle("我的计算器");
   this.setDefaultCloseOperation(EXIT_ON_CLOSE);
   this.setContentPane(mainpanel);
   this.setResizable(false);
   BorderLayout bl = new BorderLayout();
   mainpanel.setLayout(bl);
   mainpanel.add(txt,BorderLayout.NORTH);
   mainpanel.add(centerpanel,BorderLayout.CENTER);
  
  this.setBounds(x,y, 300, 240);
   this.setVisible(true);
}
public static void main(String[] args) {
     new MyCalculater(750, 200);}
@Override
public void actionPerformed(ActionEvent e) {
   JButton jb = (JButton)e.getSource();
   char c = jb.getText().charAt(0);
   switch(c){
   case '0':
   case '1':
   case '2':
   case '3':
   case '4':
   case '5':
   case '6':
   case '7':
   case '8':
   case '9':{
    addNum(c);
    break;
   }
   case '+':
   case '-':
   case '*':
   case '/':{
    signEvent(c);
    break;
   }
   case 'c':{
    MyCalculater.this.dispose();
    new MyCalculater(MyCalculater.this.getLocation().x,MyCalculater.this.getLocation().y);
    break;
   }
   case '=':{
    if(!flag)this.txt.setText(sb1.toString());;
    sb1 = new StringBuffer(getAnswer());
    sb2 = new StringBuffer();
    this.txt.setText(sb1.toString());
    sign = '=';
            flag = false;
    break;
   }
   default: break;
   }
  
}
private void signEvent(char c) {
   if(flag&&sb2.length()!=0){
    sb1 = new StringBuffer(""+getAnswer());
    this.txt.setText(sb1.toString()); 
   }
   else {
    flag = !flag; 
    this.txt.setText("");
   }
   this.sign = c;
}
private String getAnswer() {
   double a = 0;
   if(sb1.length()!=0)
   a = Double.parseDouble(sb1.toString());
   double b = 0;
   if(sb2.length()!=0)
   b = Double.parseDouble(sb2.toString());
   double answer = 0;
   switch(sign){
   case '+': 
    answer = a+b;
    this.txt.setText("");
    break;
   case '-': 
    answer = a-b;
    this.txt.setText("");
    break;
   case '*': 
    answer = a*b;
    this.txt.setText("");
    break;
   case '/': 
    answer = a/b;
    this.txt.setText("");
    break;
   default : 
    return null;
   }
   this.sb1 = new StringBuffer("");
   this.sb2 = new StringBuffer("");
   return ""+answer;
}
private void addNum(char c) {
  
   if(!flag){
    sb1.append(c);
     this.txt.setText(sb1.toString());
   }
   else {
    sb2.append(c);
    this.txt.setText(sb2.toString());
   }}
}