importjavax.swing.*;//新的窗口组件包
importjava.awt.*;
importjava.awt.event.*;
publicclassJisuanqiimplementsActionListener
{JFramejf=newJFrame();
booleandotExist,operated,equaled;//帮助运算的布尔变量
doubleresult;//目前的结果
charlastOperator;//表示上一运算符
JTextFieldjtf;//显示栏
JButtondot,plus,minus,multi,div,sqrt,equal,change,clear,quyu;//运算符
JButton[]numbers;
Panelp=newPanel();
//构造者
publicJisuanqi()
{
jf.setTitle("陈巳伟牌计算器");
//初始化变量
dotExist=false;//表示当前的数是否有小数点
operated=false;//表示任意运算符是否被按下
equaled=false;//表示等号是否被按下
result=0;
lastOperator='?';
//初始化窗口变量
jtf=newJTextField("0");
jtf.setEditable(false);//设置文本框的可编辑性
jf.setSize(250,200);
jf.setVisible(true);
numbers=newJButton[10];
for(inti=0;i<10;i++)
numbers[i]=newJButton(""+i);
dot=newJButton(".");
plus=newJButton("+");
minus=newJButton("-");
multi=newJButton("*");
div=newJButton("/");
sqrt=newJButton("√");
equal=newJButton("=");
change=newJButton("±");
clear=newJButton("NC");
quyu=newJButton("%");
p.setLayout(newGridLayout(5,4));
p.add(numbers[1]);
p.add(numbers[2]);
p.add(numbers[3]);
p.add(plus);
p.add(numbers[4]);
p.add(numbers[5]);
p.add(numbers[6]);
p.add(minus);
p.add(numbers[7]);
p.add(numbers[8]);
p.add(numbers[9]);
p.add(multi);
p.add(dot);
p.add(numbers[0]);
p.add(sqrt);
p.add(div);
p.add(equal);
p.add(change);
p.add(clear);
p.add(quyu);
jf.add(jtf,BorderLayout.NORTH);
jf.add(p,BorderLayout.CENTER);
numbers[0].addActionListener(this);
numbers[1].addActionListener(this);
numbers[2].addActionListener(this);
numbers[3].addActionListener(this);
plus.addActionListener(this);
numbers[4].addActionListener(this);
numbers[5].addActionListener(this);
numbers[6].addActionListener(this);
minus.addActionListener(this);
numbers[7].addActionListener(this);
numbers[8].addActionListener(this);
numbers[9].addActionListener(this);
multi.addActionListener(this);
dot.addActionListener(this);
sqrt.addActionListener(this);
div.addActionListener(this);
equal.addActionListener(this);
change.addActionListener(this);
clear.addActionListener(this);
quyu.addActionListener(this);
}
//对按钮进行反应的方法
publicvoidactionPerformed(ActionEvente)
{
JButtonbtn=(JButton)e.getSource();
if(btn==clear)
{
jtf.setText("0");
dotExist=false;
operated=false;
equaled=false;
result=0;
lastOperator='?';
}
elseif(btn==equal)
{
operate('=');
equaled=true;
}
elseif(btn==plus)
{
operate('+');
equaled=false;
}
elseif(btn==minus)
{
operate('-');
equaled=false;
}
elseif(btn==multi)
{
operate('*');
equaled=false;
}
elseif(btn==div)
{
operate('/');
equaled=false;
}
elseif(btn==quyu){
operate('%');
equaled=false;
}
elseif(btn==change)
{
operate('p');
operate('=');
equaled=true;
}
elseif(btn==sqrt)
{
operate('s');
operate('=');
equaled=true;
}
else
{
if(equaled)
result=0;
for(inti=0;i<10;i++)
if(btn==numbers[i])
{
if(jtf.getText().equals("0"))
jtf.setText(""+i);
elseif(!operated)
jtf.setText(jtf.getText()+i);
else
{
jtf.setText(""+i);
operated=false;
}
}
if(btn==dot&&!dotExist)
{
jtf.setText(jtf.getText()+".");
}
}
}
//进行运算的方法
privatevoidoperate(charoperator)
{
doublecurrentNumber=Double.valueOf(jtf.getText()).doubleValue();
if(lastOperator=='?')
result=currentNumber;
elseif(lastOperator=='+')
result+=currentNumber;
elseif(lastOperator=='-')
result-=currentNumber;
elseif(lastOperator=='*')
result*=currentNumber;
elseif(lastOperator=='/')
result/=currentNumber;
elseif(lastOperator=='%')
result%=currentNumber;
elseif(lastOperator=='p')
result*=-1;
elseif(lastOperator=='s')
result=Math.sqrt(currentNumber);
elseif(lastOperator=='='&&equaled)
result=currentNumber;
jtf.setText(""+result);
operated=true;
lastOperator=operator;
}
publicstaticvoidmain(String[]args)
{newJisuanqi();
}
}