import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener{
JTextField tf,tff;
JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bAdd,bSub,bMul,bDiv,bBack,bClear,bSum, bsqrt,bdao,byu,bfu,bd,bce;
boolean mark1frist=true,numc=false,markf=false,nodechang=false,equalprevious=false;//markf:用于记录是否取过数了
String mark1=null,mark2=null,mark3=null,mark3_r;
int ma=0,mark2chang=0;//记录输入符号次数
public Calculator(){
super("计算器");
}
public void Layout(){
JPanel p1 =new JPanel();
JPanel p2 =new JPanel();
JPanel p3 =new JPanel();
JPanel p4 =new JPanel();
Color bacgrd=new Color(221,221,221);
p2.setBackground(bacgrd);
p4.setBackground(bacgrd);
Font but=new Font("宋体",Font.PLAIN,12);
b0=new JButton("0");
b0.setFont(but);
b1=new JButton("1");
b1.setFont(but);
b2=new JButton("2");
b2.setFont(but);
b3=new JButton("3");
b3.setFont(but);
b4=new JButton("4");
b4.setFont(but);
b5=new JButton("5");
b5.setFont(but);
b6=new JButton("6");
b6.setFont(but);
b7=new JButton("7");
b7.setFont(but);
b8=new JButton("8");
b8.setFont(but);
b9=new JButton("9");
b9.setFont(but);
bAdd=new JButton("+");
bAdd.setFont(but);
bSub=new JButton("-");
bSub.setFont(but);
bMul=new JButton("*");
bMul.setFont(but);
bDiv=new JButton("/");
bDiv.setFont(but);
bBack=new JButton("BackSpace");
bBack.setFont(but);
bBack.setForeground(Color.blue);
bSum=new JButton("=");
bSum.setFont(but);
bsqrt=new JButton("Sqrt");
bsqrt.setFont(but);
bdao=new JButton("1/x");
bdao.setFont(but);
byu=new JButton("%");
byu.setFont(but);
bfu=new JButton("+/-");
bfu.setFont(but);
bce=new JButton("CE");
bce.setFont(but);
bce.setForeground(Color.blue);
bClear=new JButton("C");
bClear.setFont(but);
bClear.setForeground(Color.blue);
bd=new JButton(".");
bd.setFont(but);
Color blue=Color.blue;
p1.setLayout(new GridLayout(1,1));
tf =new JTextField("0.",23);
tf.setEditable(false);
Color cr=Color.white;
tf.setBackground(cr);
tf.setSize(20,196);
tf.setHorizontalAlignment(JTextField.RIGHT);
p1.add(tf);
GridBagLayout p2gridbag=new GridBagLayout();
GridBagConstraints p2c=new GridBagConstraints();
p2.setLayout(p2gridbag);
JLabel jleb=new JLabel("符号:");
jleb.setFont(new Font("宋体",Font.PLAIN,14));
tff=new JTextField(2);
tff.setEditable(false);
p2c.insets=new Insets(2,2,2,2);
p2c.fill=GridBagConstraints.HORIZONTAL;
p2gridbag.setConstraints(jleb,p2c);
p2.add(jleb);
p2gridbag.setConstraints(tff,p2c);
p2.add(tff);
p2gridbag.setConstraints(bBack,p2c);
p2.add(bBack);
p2gridbag.setConstraints(bce,p2c);
p2.add(bce);
p2c.gridwidth=GridBagConstraints.REMAINDER;
p2gridbag.setConstraints(bClear,p2c);
p2.add(bClear);
GridBagLayout p4gridbag=new GridBagLayout();
GridBagConstraints p4c=new GridBagConstraints();
p4.setLayout(p4gridbag);
p4c.insets=new Insets(2,2,2,2);
p4c.fill=GridBagConstraints.HORIZONTAL;
p4gridbag.setConstraints(b7,p4c);
p4.add(b7);
p4gridbag.setConstraints(b8,p4c);
p4.add(b8);
p4gridbag.setConstraints(b9,p4c);
p4.add(b9);
p4gridbag.setConstraints(bDiv,p4c);
p4.add(bDiv);
p4c.gridwidth=GridBagConstraints.REMAINDER;
p4gridbag.setConstraints(bsqrt,p4c);
p4.add(bsqrt);
p4c.gridwidth=1;
p4gridbag.setConstraints(b4,p4c);
p4.add(b4);
p4gridbag.setConstraints(b5,p4c);
p4.add(b5);
p4gridbag.setConstraints(b6,p4c);
p4.add(b6);
p4gridbag.setConstraints(bMul,p4c);
p4.add(bMul);
p4c.gridwidth=GridBagConstraints.REMAINDER;
p4gridbag.setConstraints(byu,p4c);
p4.add(byu);
p4c.gridwidth=1;
p4gridbag.setConstraints(b1,p4c);
p4.add(b1);
p4gridbag.setConstraints(b2,p4c);
p4.add(b2);
p4gridbag.setConstraints(b3,p4c);
p4.add(b3);
p4gridbag.setConstraints(bSub,p4c);
p4.add(bSub);
p4c.gridwidth=GridBagConstraints.REMAINDER;
p4gridbag.setConstraints(bdao,p4c);
p4.add(bdao);
p4c.gridwidth=1;
p4gridbag.setConstraints(b0,p4c);
p4.add(b0);
p4gridbag.setConstraints(bfu,p4c);
p4.add(bfu);
p4gridbag.setConstraints(bd,p4c);
p4.add(bd);
p4gridbag.setConstraints(bAdd,p4c);
p4.add(bAdd);
p4c.gridwidth=GridBagConstraints.REMAINDER;
p4gridbag.setConstraints(bSum,p4c);
p4.add(bSum);
Container contenPane=getContentPane();
contenPane.setBackground(bacgrd);
GridBagLayout gridbag=new GridBagLayout();
GridBagConstraints c=new GridBagConstraints();
contenPane.setLayout(gridbag);
Font f=new Font("SansSerif",Font.ITALIC,10);
contenPane.setFont(f);
c.gridwidth=GridBagConstraints.REMAINDER;
c.insets=new Insets(6,2,2,2);
gridbag.setConstraints(p1,c);
contenPane.add(p1);
c.insets=new Insets(8,10,4,10);
contenPane.add(p2,c);
contenPane.add(p4,c);
b0.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
bAdd.addActionListener(this);
bSub.addActionListener(this);
bMul.addActionListener(this);
bDiv.addActionListener(this);
bClear.addActionListener(this);
bBack.addActionListener(this);
bSum.addActionListener(this);
bdao.addActionListener(this);
byu.addActionListener(this);
bfu.addActionListener(this);
bd.addActionListener(this);
bce.addActionListener(this);
bsqrt.addActionListener(this);
}
public static void main(String [] args){
Calculator clr=new Calculator();
clr.Layout();
clr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Toolkit tk=Toolkit.getDefaultToolkit();
Image image=tk.createImage("/zuoye/tile.pnp"); // 图片的地址
clr.setIconImage(image);
clr.pack();
clr.setLocation(500,350);
clr.setResizable(false);
clr.show();
}
public void actionPerformed(ActionEvent ae){
String str = ae.getActionCommand();
System.out.println(str);
String mid;
int i;
String j;
if(tf.getText().equals("0.")&&nodechang==false) tf.setText("");
for(i=0;i<10;i++){
Integer m=new Integer(i);
j=m.toString();
if(str.equals(j)){
if(markf){
mid=tf.getText()+j;
}
else mid=j;
tf.setText(mid);
markf=true;
}
}
if(str.equals(".")){
if(nodechang==false) {
String node;
node=tf.getText()+".";
System.out.println(node);
tf.setText(node);
nodechang=true;
}
}
if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")||str.equals("%")){
equalprevious=false;
nodechang=false;
if(mark1!=null&&mark3==null&&mark2chang==1){
mark2=str;
tff.setText(str);
}
if(mark2chang==0){
mark1=tf.getText();
markf=false;
mark2=str;
tff.setText(mark2);
mark2chang=1;
System.out.println(mark1);
}
else{
mark3=tf.getText();
if(mark1!=null&&mark2chang==1&&mark3!=null){
if(mark2.equals("/")&&mark3.equals("0")){
String we;
we="NaN";
tf.setText(we);
tff.setText(mark2);
}
else{
String ag;
ag=jisuan(mark1,mark2,mark3);
mark1=ag;