Windows操作系统自带的计算器是个很方便的小工具,利用Java的GUI编程,实现一个Java GUI计算器应用程序界面,窗口标题为“计算器”,窗口布局如下图所示,在此计算器应用程序中实现“+、-、*、/”运算操作。
代码:import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class T11 extends JFrame implements ActionListener{
int deng=0,fu=0,i=0,point=0,n=0;
float sum=0,equ;
String v="";
BorderLayout bo=new BorderLayout();
GridLayout g=new GridLayout(4,4);
JPanel jp=new JPanel();
JTextField jt=new JTextField(" 0");
JButton b1=new JButton("7");
JButton b2=new JButton("8");
JButton b3=new JButton("9");
JButton b4=new JButton("+");
JButton b5=new JButton("4");
JButton b6=new JButton("5");
JButton b7=new JButton("6");
JButton b8=new JButton("-");
JButton b9=new JButton("1");
JButton b10=new JButton("2");
JButton b11=new JButton("3");
JButton b12=new JButton("*");
JButton b13=new JButton("0");
JButton b14=new JButton(".");
JButton b15=new JButton("=");
JButton b16=new JButton("/");
@SuppressWarnings("static-access")
public T11(String title)
{
super(title);
this.setSize(300,300);
jp.setSize(300,200);
jt.setSize(300,100);
jp.setLayout(g);

jp.add(b1);
jp.add(b2);
jp.add(b3);
jp.add(b4);
jp.add(b5);
jp.add(b6);
jp.add(b7);
jp.add(b8);
jp.add(b9);
jp.add(b10);
jp.add(b11);
jp.add(b12);
jp.add(b13);
jp.add(b14);
jp.add(b15);
jp.add(b16);

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);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
this.add(jt,bo.NORTH);
this.add(jp,bo.CENTER);
    this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
{
if(deng==1||fu==1)
v="";
   v=v+"7";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b2)
{
if(deng==1||fu==1)
v="";
   v=v+"8";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b3)
{
if(deng==1||fu==1)
v="";
   v=v+"9";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b4)//+
{
if(n==1)
{
if(i==0)
sum=Float.parseFloat(v);
else if(i==1){sum+=Float.parseFloat(v);}
else if(i==2){sum-=Float.parseFloat(v);}
else if(i==3){sum*=Float.parseFloat(v);}
else if(i==4){sum/=Float.parseFloat(v);}
}
else
{
}
i=1;
fu=1;n=0;deng=0;point=0;

}
if(e.getSource()==b5)
{
if(deng==1||fu==1)
v="";
   v=v+"4";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b6)
{
if(deng==1||fu==1)
v="";
   v=v+"5";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b7)
{
if(deng==1||fu==1)
v="";
   v=v+"6";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b8)//-
{
if(n==1)
{
if(i==0)
sum=Float.parseFloat(v);
else if(i==1)sum+=Float.parseFloat(v);
else if(i==2)sum-=Float.parseFloat(v);
else if(i==3)sum*=Float.parseFloat(v);
else if(i==4)sum/=Float.parseFloat(v);
}
else
{
}
i=2;
fu=1;n=0;deng=0;point=0;

}
if(e.getSource()==b9)
{
if(deng==1||fu==1)
v="";
   v=v+"1";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b10)
{
if(deng==1||fu==1)
v="";
   v=v+"2";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b11)
{
if(deng==1||fu==1)
v="";
   v=v+"3";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b4)//*
{
if(n==1)
{
if(i==0)
sum=Float.parseFloat(v);
else if(i==1)sum+=Float.parseFloat(v);
else if(i==2)sum-=Float.parseFloat(v);
else if(i==3)sum*=Float.parseFloat(v);
else if(i==4)sum/=Float.parseFloat(v);
}
else
{
}
i=3;
fu=1;n=0;deng=0;point=0;

}
if(e.getSource()==b13)
{
if(deng==1||fu==1)
v="";
   v=v+"0";
   jt.setText(v);
deng=0;fu=0;n=1;
}
if(e.getSource()==b14)//.
{
if(deng==1||fu==1)
v="";
if("".equals(v))jt.setText("0.");
else
{
v=v+".";
     jt.setText(v);
}
point=1;
deng=0;fu=0;n=1;

}
if(e.getSource()==b15)//=
{
if(fu==1){}
else
{
switch(i)
{
case 0: equ=sum;break;
case 1: equ=sum+Float.parseFloat(v);break;
case 2: equ=sum-Float.parseFloat(v);break;
case 3: equ=sum*Float.parseFloat(v);break;
case 4: equ=sum/Float.parseFloat(v);break;
}
    sum=0;v="";
    v=String.valueOf(equ);
    jt.setText(String.valueOf(equ));
   deng=1;i=0;

}
}
if(e.getSource()==b16)//+
{
if(n==1)
{
if(i==0)
sum=Float.parseFloat(v);
else if(i==1)sum+=Float.parseFloat(v);
else if(i==2)sum-=Float.parseFloat(v);
else if(i==3)sum*=Float.parseFloat(v);
else if(i==4)sum/=Float.parseFloat(v);
}
else
{
}
i=4;
fu=1;n=0;deng=0;point=0;

}
}
public static void main(String[]args)
{
new T11("计算器");
}
}

解决方案 »

  1.   

    你这个代码设计的太蛋疼了,在你这个基础上给改的,能跑最简单的一次性加减运算,你看看import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    @SuppressWarnings("serial")
    public class T11 extends JFrame implements ActionListener{
        int deng=0,fu=0,i=0,point=0,n=0;
        float sum=0,equ;
        String v="";
        BorderLayout bo=new BorderLayout();
        GridLayout g=new GridLayout(4,4);
        JPanel jp=new JPanel();
        JTextField jt=new JTextField(" 0");
        JButton b1=new JButton("7");
        JButton b2=new JButton("8");
        JButton b3=new JButton("9");
        JButton b4=new JButton("+");
        JButton b5=new JButton("4");
        JButton b6=new JButton("5");
        JButton b7=new JButton("6");
        JButton b8=new JButton("-");
        JButton b9=new JButton("1");
        JButton b10=new JButton("2");
        JButton b11=new JButton("3");
        JButton b12=new JButton("*");
        JButton b13=new JButton("0");
        JButton b14=new JButton(".");
        JButton b15=new JButton("=");
        JButton b16=new JButton("/");
        @SuppressWarnings("static-access")
        public T11(String title)
        {
            super(title);
            this.setSize(300,300);
            jp.setSize(300,200);
            jt.setSize(300,100);
            jp.setLayout(g);        jp.add(b1);
            jp.add(b2);
            jp.add(b3);
            jp.add(b4);
            jp.add(b5);
            jp.add(b6);
            jp.add(b7);
            jp.add(b8);
            jp.add(b9);
            jp.add(b10);
            jp.add(b11);
            jp.add(b12);
            jp.add(b13);
            jp.add(b14);
            jp.add(b15);
            jp.add(b16);        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);
            b10.addActionListener(this);
            b11.addActionListener(this);
            b12.addActionListener(this);
            b13.addActionListener(this);
            b14.addActionListener(this);
            b15.addActionListener(this);
            b16.addActionListener(this);
            this.add(jt,bo.NORTH);
            this.add(jp,bo.CENTER);
            this.setLocationRelativeTo(null);        
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource()==b1)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"7";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b2)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"8";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b3)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"9";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b4)//+
            {
                if(n==1)
                {
                    if(i==0)
                        sum=Float.parseFloat(v);
                    else if(i==1){sum+=Float.parseFloat(v);}
                    else if(i==2){sum-=Float.parseFloat(v);}
                    else if(i==3){sum*=Float.parseFloat(v);}
                    else if(i==4){sum/=Float.parseFloat(v);}
                }
                else
                {
                }
                i=1;
                fu=1;n=0;deng=0;point=0;        }
            if(e.getSource()==b5)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"4";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b6)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"5";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b7)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"6";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b8)//-
            {
                if(n==1)
                {
                    if(i==0)
                        sum=Float.parseFloat(v);
                    else if(i==1)sum+=Float.parseFloat(v);
                    else if(i==2)sum-=Float.parseFloat(v);
                    else if(i==3)sum*=Float.parseFloat(v);
                    else if(i==4)sum/=Float.parseFloat(v);
                }
                else
                {
                }
                i=2;
                fu=1;n=0;deng=0;point=0;        }
            if(e.getSource()==b9)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"1";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b10)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"2";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b11)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"3";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }        // ioe_gaoyong添加
            if(e.getSource()==b12)//-
            {
                if(n==1)
                {
                    if(i==0)
                        sum=Float.parseFloat(v);
                    else if(i==1)sum+=Float.parseFloat(v);
                    else if(i==2)sum-=Float.parseFloat(v);
                    else if(i==3)sum*=Float.parseFloat(v);
                    else if(i==4)sum/=Float.parseFloat(v);
                }
                else
                {
                }
                i=3;
                fu=1;n=0;deng=0;point=0;        }   // ioe_gaoyong添加结束        if(e.getSource()==b4)//*
            {
                if(n==1)
                {
                    if(i==0)
                        sum=Float.parseFloat(v);
                    else if(i==1)sum+=Float.parseFloat(v);
                    else if(i==2)sum-=Float.parseFloat(v);
                    else if(i==3)sum*=Float.parseFloat(v);
                    else if(i==4)sum/=Float.parseFloat(v);
                }
                else
                {
                }
                i=1;//这里修改
                fu=1;n=0;deng=0;point=0;        }        if(e.getSource()==b13)
            {
                if(deng==1||fu==1)
                    v="";
                v=v+"0";
                jt.setText(v);
                deng=0;fu=0;n=1;
            }
            if(e.getSource()==b14)//.
            {
                if(deng==1||fu==1)
                    v="";
                if("".equals(v))jt.setText("0.");
                else
                {
                    v=v+".";
                    jt.setText(v);
                }
                point=1;
                deng=0;fu=0;n=1;        }
            if(e.getSource()==b15)//=
            {
                if(fu==1){}
                else
                {
                    switch(i)
                    {
                        case 0: equ=sum;break;
                        case 1: equ=sum+Float.parseFloat(v);break;
                        case 2: equ=sum-Float.parseFloat(v);break;
                        case 3: equ=sum*Float.parseFloat(v);break;
                        case 4: equ=sum/Float.parseFloat(v);break;
                    }
                    sum=0;v="";
                    v=String.valueOf(equ);
                    jt.setText(String.valueOf(equ));
                    deng=1;i=0;            }
            }
            if(e.getSource()==b16)//+
            {
                if(n==1)
                {
                    if(i==0)
                        sum=Float.parseFloat(v);
                    else if(i==1)sum+=Float.parseFloat(v);
                    else if(i==2)sum-=Float.parseFloat(v);
                    else if(i==3)sum*=Float.parseFloat(v);
                    else if(i==4)sum/=Float.parseFloat(v);
                }else{
                }
                i=4;
                fu=1;n=0;deng=0;point=0;        }
        }
        public static void main(String[]args){
            new T11("计算器");
        }
    }
      

  2.   

    不好意思,我照着你改的修改了一下,但我的程序摁“=”时,还是没反应,麻烦再指点指点。
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    @SuppressWarnings("serial")
    public class T1 extends JFrame implements ActionListener{ int enter_eql=0,enter_digital=0,enter_operator=0,enter_point=0,i=0;
    float sum=0,s1,s2,eql;
    String v="";
    GridLayout gl=new GridLayout(2,1);
    JPanel jptext=new JPanel();
    JPanel jb=new JPanel();
    JTextField jtf=new JTextField(20);
    JButton j0=new JButton("0");
    JButton j1=new JButton("1");
    JButton j2=new JButton("2");
    JButton j3=new JButton("3");
    JButton j4=new JButton("4");
    JButton j5=new JButton("5");
    JButton j6=new JButton("6");
    JButton j7=new JButton("7");
    JButton j8=new JButton("8");
    JButton j9=new JButton("9");
    JButton j_Add=new JButton("+");
    JButton j_Minus=new JButton("-");
    JButton j_Multiplied=new JButton("*");
    JButton j_Divide=new JButton("/");
    JButton j_Point=new JButton(".");
    JButton j_Equal=new JButton("=");
    public T1()
    {
    super("我的计算器");
    this.setLayout(gl);
    jptext.add(jtf);
    this.add(jptext);
    jb.setLayout(new GridLayout(4,4));

           j0.addActionListener(this);
           j1.addActionListener(this);
           j2.addActionListener(this);
           j3.addActionListener(this);
           j4.addActionListener(this);
           j5.addActionListener(this);
           j6.addActionListener(this);
           j7.addActionListener(this);
           j8.addActionListener(this);
           j9.addActionListener(this);
           j_Add.addActionListener(this);
           j_Minus.addActionListener(this);
           j_Multiplied.addActionListener(this);
           j_Divide.addActionListener(this);
           j_Point.addActionListener(this);
           j_Equal.addActionListener(this);
        jb.add(j0);
    jb.add(j1);
    jb.add(j2);
    jb.add(j3);
    jb.add(j4);
    jb.add(j5);
    jb.add(j6);
    jb.add(j7);
    jb.add(j8);
    jb.add(j9);
    jb.add(j_Add);
    jb.add(j_Minus);
    jb.add(j_Multiplied);
    jb.add(j_Divide);
    jb.add(j_Point);
    jb.add(j_Equal);
          this.add(jb);
          pack();
     this.setVisible(true);
     Toolkit tk = this.getToolkit();
      Dimension de = tk.getScreenSize();
      setBounds((de.width - this.getWidth()) / 2,(de.height - this.getHeight()) / 2, this.getWidth(), this.getHeight()); 
                    //使之居于屏幕正中央

    }
    public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==j0)
    {
    if(enter_operator==1||enter_eql==1)//enter_operator==1表示按了运算符号,enter_eql==1表示按了=
    v="";
    v=v+"0";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;//表示按了数字
    enter_eql=0;
    }
    if(e.getSource()==j1)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"1";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j2)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"2";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j3)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"3";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j4)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"4";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j5)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"5";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j6)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"6";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j7)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"7";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j8)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"8";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j9)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    v=v+"9";
    jtf.setText(v);
    enter_operator=0;
    enter_digital=1;
    enter_eql=0;
    }
    if(e.getSource()==j_Add)
    {
    if(enter_digital==1)
    {
    if(i==0)//i==0表示第一次按运算符,i不等于0表示多次运算
    sum=Float.parseFloat(v);
    else if(i==1){sum=sum+Float.parseFloat(v);}
    else if(i==2){sum=sum-Float.parseFloat(v);}
    else if(i==3){sum=sum*Float.parseFloat(v);}
    else  if(i==4){sum=sum/Float.parseFloat(v);}
    }
    else{}

    enter_operator=1;
    enter_digital=0;
    enter_point=0;
    enter_eql=0;
    i=1;
    }
    if(e.getSource()==j_Minus)
    {
    if(enter_digital==1)
    {
    if(i==0)
    sum=Float.parseFloat(v);
    else if(i==1)sum=sum+Float.parseFloat(v);
    else if(i==2)sum=sum-Float.parseFloat(v);
    else if(i==3)sum=sum*Float.parseFloat(v);
    else  if(i==4)sum=sum/Float.parseFloat(v);
    }
    else{}
    enter_eql=0;
    enter_operator=1;
    enter_digital=0;
    enter_point=0;
    i=2;
    }
    if(e.getSource()==j_Multiplied)
    {
    if(enter_digital==1)
    {
    if(i==0)
    sum=Float.parseFloat(v);
    else if(i==1)sum=sum+Float.parseFloat(v);
    else if(i==2)sum=sum-Float.parseFloat(v);
    else if(i==3)sum=sum*Float.parseFloat(v);
    else  if(i==4)sum=sum/Float.parseFloat(v);
    }
    else{}
    enter_eql=0;
    enter_operator=1;
    enter_digital=0;
    enter_point=0;
    i=3;
    }
    if(e.getSource()==j_Divide)
    {
    if(enter_digital==1)
    {
    if(i==0)
    sum=Float.parseFloat(v);
    else if(i==1)sum=sum+Float.parseFloat(v);
    else if(i==2)sum=sum-Float.parseFloat(v);
    else if(i==3)sum=sum*Float.parseFloat(v);
    else  if(i==4)sum=sum/Float.parseFloat(v);
    }
    else{}
    enter_eql=0;
    enter_operator=1;
    enter_digital=0;
    enter_point=0;
    i=4;
    }
    if(e.getSource()==j_Point)
    {
    if(enter_operator==1||enter_eql==1)
    v="";
    if(enter_point==0)
    {
    if("".equals(v))
       v="0.";
         else v=v+".";
    }
    enter_digital=1;
       enter_point=1;
       enter_operator=0;
       enter_eql=0;
    }
    if(e.getSource()==j_Equal)
    {
    if(enter_digital==1)
    {
    }
    else
    {
    if(v=="")
    {
    }
    else
    {
    s1=sum;
    s2=Float.parseFloat(v);
    switch(i)
    {
    case 0:eql=Float.parseFloat(v);break;
    case 1:eql=s1+s2;break;
    case 2: eql=s1-s2;break;
    case 3:eql=s1*s2;break;
    case 4:eql=s1/s2;break;
    }
    sum=0;
    //enter_operator=1;
    v="";
    v=String.valueOf(eql);
    jtf.setText(String.valueOf(eql));
    i=0;
    enter_eql=1;
    }
    }
    }
    }
    public static void main(String[]args)
    {
    new T1();
    }}
      

  3.   

    我写的一个小型的开源的计算器 abacus 1.0,在这里
    http://www.oschina.net/code/snippet_736932_13725