f=new JFrame("计算器");p=new Panel();//运算界面p p.setLayout(new GridLayout(4,4)); // 设置p的布局为GridLayout,四行四列 tf=new TextField(30);//实例化按钮 b1=new Button("7");b2=new Button("8");b3=new Button("9");b4=new Button("+");b5=new Button("4");b6...
求JAVA计算器源代码!!!
class Calculator extends WindowAdapter implements ActionListener//创建Calculator类, 实现ActionListener接口.
{
//result代表上一次运算结果;data1代表当前文本框内显示的数,radixPointDepth代表小数位数
private double result=0,data1=0,radixPointDepth=3;
//resultIndicate 代表是否敲击了等号,要求结果
//radixPointIndicate代表是否敲击了小数点
private boolean radixPointIndicate=false,resultIndicate=false;
private char prec='+';//代表当前运算符
private JFrame f;//创建窗口
private TextField tf;//创建文本框,用于存放结果
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17;//创建按钮
private Panel p;//创建/面板容器
public void init()
{
f=new JFrame("计算器");
p=new Panel();//运算界面p
p.setLayout(new GridLayout(4,4)); // 设置p的布局为GridLayout,四行四列
tf=new TextField(30);
//实例化按钮
b1=new Button("7");
b2=new Button("8");
b3=new Button("9");
b4=new Button("+");
b5=new Button("4");
b6=new Button("5");
b7=new Button("6");
b8=new Button("-");
b9=new Button("1");
b10=new Button("2");
b11=new Button("3");
b12=new Button("*");
b13=new Button("0");
b14=new Button(".");
b15=new Button("=");
b16=new Button("/");
b17=new Button("清零");
f.add(tf,"North"); //把文本区域添加到框架的上方
f.add(p,"Center"); //把面版添加到框架的中间
f.add(b17,"South"); //把按钮(清零)添加到框架的下方
//把按钮添加到面版上
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.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);
b17.addActionListener(this);
f.addWindowListener(this); //为框架添加监听
f.setSize(300,190);//设置框架的大小
f.setVisible(true);//设置框架为可见
}
//监听程序 ,监听actionEvent事件
public void actionPerformed(ActionEvent e)
{
String s;
s=e.getActionCommand(); //s存放敲击的命令字符串
//SWITCH开关
switch(s.charAt(0))
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9'://按了“0-9”,就执行下面
if(resultIndicate) //如果敲过等号,直接敲数字,则代表一个新运算开始了,所有内容初始化
{
result=0;
data1=0;
prec='+';
}
Integer Int1=new Integer(s);
if(radixPointIndicate) //如果敲击过小数点
{
radixPointDepth=radixPointDepth/10;
data1=data1+(Int1.intValue())*radixPointDepth;
}
else
{
data1=data1*10+(Int1.intValue());
}
Double displayNumber=new Double(data1);
tf.setText(displayNumber.toString());
resultIndicate=false; //只要敲击了数字键,就代表新的结果还没有算出来,所以为false
break;
case '+':
case '-':
case '*':
case '/':
case '='://按了“+、-、*、/”,执行下面
if(s.charAt(0)!='='&&resultIndicate)
//如果敲击+、-、*、/,并且已经计算过结果,则取新的操作符,所以为false;代表连续运算
//prec存放新敲击的运算符
{
prec=s.charAt(0);
resultIndicate=false;
}
else
{
//用SWITCH开关运算出执行了“+、-、*、/”的结果
switch(prec)
{
case '+':
result=result+data1;
break;
case '-':
result=result-data1;
break;
case '*':
result=result*data1;
break;
case '/':
result=result/data1;
break;
}
}
radixPointIndicate=false; //如果敲击运算符或者=,则认为一个运算数的终结;所以小数点要清空
radixPointDepth=1;
displayNumber=new Double(result); //将最新的计算结果显示在文本框内
tf.setText(displayNumber.toString());
//监听是否按了“=”
if(s.charAt(0)!='=') //如果没有敲等号,则敲了+、-、*、/,那么data1清空
{
data1=0;
prec=s.charAt(0);
}
else
{
resultIndicate=true; //resultIndicate只有当敲击了等号,才为true,否则为false
}
break;
case '.':
radixPointIndicate=true;
break;
}
//监听是否按了为“清零”,是则对各数据清零
if(s.equals("清零"))
{
result=0;
data1=0;
radixPointDepth=1;
tf.setText("");
}
}2009-06-08