show.setText(show.getText()+e.getActionCommand());
if(e.getSource()==b[0]&&getValue==0&&p==0)
show.setText("0");
if(e.getSource()!
=b[0]&&getValue==0&&p==0)
show.setText(e.getActionCommand());
i++;//i用来标记数字键触发的状态
设定计算器关闭的方法:
publicvoidwindowClosing(WindowEvente){
if(e.getSource()==about)
about.setVisible(false);
-5-
elseif(e.getSource()==frame)
System.exit(0);
为按钮绑定监听器:
about.addWindowListener(this);
3.3系统特点:
该计算器基本运算没有问题,清零、正负号、求倒数、退格功能都能很【1】
好的实现,总体能完成一个计算器的基本功能,但仍有许多地方需要改进,比如小数点的实现所存在的一些问题,虽然在基本的运算过程当中不会造成太大影响,但这依然不能认为是一个很好的计算器,同时,在另一方面,该计算器还没能很好的实现连续计算的功能,必须每次按下等号按钮计算出结果后才能用产生的结果接着进行下一次的计算,改进的方法是在运算符上同时注册Result类,让运算符同时拥有计算结果的功能.
【2】由于简易计算器属于一个题,所以关于计算器的全部都是由自己完成.
-6-
4.程序代码
【1】程序代码
importjava.awt.Color;
importjava.awt.FlowLayout;
importjava.awt.GridLayout;
importjava.awt.Label;
importjava.awt.Panel;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JFrame;importjavax.swing.JTextField;importjavax.swing.SwingConstants;
publicclassCalculatorextendsWindowAdapterimplementsActionListener{
JFrameframe;
JTextFieldshow;
JButtonbc,c,ce,ab,jia,jian,cheng,chu,equ,point,sqrt,ds,bfh,
zf;
//按钮退格,清空,复位,关于,加,减,乘,除,等号,小数点,2次方根,倒数,
百分号,正负号
JButtonb[]=newJButton[10];//按钮数组,数字键0,9
doublesum=0,getValue;
inti=0,j=0,p=0,l,action;
JDialogabout;
finalintslength=30;//设置结果显示有效长度
publicvoiddisp(){
frame=newJFrame();
frame.setTitle("xx");的个人计算器
frame.setSize(360,230);
frame.setLocation(380,260);
-7-
frame.setBackground(Color.LIGHT_GRAY);
frame.setLayout(newFlowLayout(FlowLayout.CENTER));
frame.setResizable(false);
//disTopbackcecabout计算器模块,包括数字显示文本框、,,,按钮
show=newJTextField(31);
show.setText("0");
show.setHorizontalAlignment(SwingConstants.RIGHT);
show.setEditable(false);
frame.add(show);
PaneldispTop=newPanel();
frame.add(dispTop);
dispTop.setLayout(newGridLayout(1,4,3,3));
bc=newJButton("Back");
bc.setForeground(Color.BLUE);
dispTop.add(bc);
ce=newJButton("CE");
ce.setForeground(Color.BLUE);
dispTop.add(ce);
c=newJButton("C");
c.setForeground(Color.BLUE);
dispTop.add(c);
//广告按钮,显示计算器制作者
ab=newJButton("About");
ab.setForeground(Color.BLUE);
dispTop.add(ab);
about=newJDialog(frame,"关于计算器",true);
Labelct=newLabel("本计算器由xx制作",1);
ct.setForeground(Color.RED);
about.add(ct,"Center");
about.setSize(200,100);
about.setLocation(500,300);
-8-
//主要按钮显示面板包括disLeft和disRight
PaneldispMain=newPanel();
frame.add(dispMain);
dispMain.setLayout(newGridLayout(1,2,10,10));
//disLeft面板,包括0-9、+/-、。
这十二个按钮
PaneldispLeft=newPanel();
dispMain.add(dispLeft);
dispLeft.setLayout(newGridLayout(4,3,3,3));
PaneldispRight=newPanel();
//disRight面板,包括+、-、*、/、sqrt、%、1/x、=这个人几个按钮
dispMain.add(dispRight);
dispRight.setLayout(newGridLayout(4,2,3,3));
//新建0-9这是个按钮,并将其添加到disLeft中
for(l=9;l>=0;l--){
b[l]=newJButton(String.valueOf(l));
dispLeft.add(b[l]);
b[l].addActionListener(this);
}
//新建其余按钮,并分别将其添加到各自的面板中
jia=newJButton("+");
jia.setForeground(Color.RED);
jian=newJButton("-");
jian.setForeground(Color.RED);
cheng=newJButton("*");
cheng.setForeground(Color.RED);
chu=newJButton("/");
chu.setForeground(Color.RED);
equ=newJButton("=");
equ.setForeground(Color.RED);
point=newJButton(".");
zf=newJButton("+/-");
-9-
sqrt=newJButton("sqrt");
bfh=newJButton("%");
ds=newJButton("1/x");
dispRight.add(chu);
dispRight.add(sqrt);
dispRight.add(cheng);
dispRight.add(bfh);
dispRight.add(jian);
dispRight.add(ds);
dispRight.add(jia);
dispRight.add(equ);
dispLeft.add(zf);
dispLeft.add(point);
//为各个按钮绑定监听器
about.addWindowListener(this);
bc.addActionListener(this);
ce.addActionListener(this);
c.addActionListener(this);
ab.addActionListener(this);
jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
equ.addActionListener(this);
point.addActionListener(this);
zf.addActionListener(this);
sqrt.addActionListener(this);
bfh.addActionListener(this);
ds.addActionListener(this);
frame.addWindowListener(this);
frame.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
getValue=Double.valueOf(show.getText()).doubleValue();
if(e.getSource()==jia){//加运算,可连加
-10-
if(j==0){
sum=getValue;
}elseif(action==1){
sum+=getValue;
}
setSum();
j++;
p=0;
i=0;
action=1;
}elseif(e.getSource()==jian){//减运算,可连减
if(j==0){
sum=getValue;
}elseif(action==2){
sum-=getValue;
}
setSum();
j++;
p=0;
i=0;
action=2;
}elseif(e.getSource()==cheng){//乘运算,可连乘
if(j==0){
sum=getValue;
}elseif(action==3){
sum*=getValue;
}
setSum();
j++;
p=0;
i=0;
action=3;
}elseif(e.getSource()==chu){//除运算,可连除
if(j==0)
sum=getValue;
elseif(action==4){
-11-
sum/=getValue;
}
setSum();
j++;
p=0;
i=0;
action=4;
}elseif(e.getSource()==equ){//等号,运算最后一个操作数
switch(action){
case1:
show.setText(String.valueOf(sum+=getValue));
break;
case2:
show.setText(String.valueOf(sum-=getValue));
break;
case3:
show.setText(String.valueOf(sum*=getValue));
break;
case4:
show.setText(String.valueOf(sum/=getValue));
break;
}
setSum();
i=0;
j=0;
action=0;
}elseif(e.getSource()==point){//小数点,只能按一个小数点
if(p==0)
show.setText(show.getText()+e.getActionCommand());
p=1;
}elseif(e.getSource()==c||e.getSource()==ce){//清空与复位
i=0;
j=0;
p=0;
sum=0;
action=0;
-12-
show.setText("0");
}elseif(e.getSource()==bc){//退格
Strings=show.getText();
if(s.length()>1){
show.setText("");
for(l=0;lchara=s.charAt(l);
show.setText(show.getText()+a);
}
}else
show.setText("0");
}elseif(e.getSource()==ab){//关于
about.setVisible(true);
}elseif(e.getSource()==sqrt){//开2次方根
sum=Math.sqrt(getValue);
setSum();
i=0;
}elseif(e.getSource()==ds){//求倒数
sum=1/getValue;
setSum();
i=0;
}elseif(e.getSource()==bfh){//百分号
sum=getValue/100;
setSum();
i=0;
}elseif(e.getSource()==zf){//正负号切换,正号不显示
Strings=show.getText();
chara=s.charAt(0);
if(a=='-'){
show.setText("");
for(l=1;lshow.setText(show.getText()+s.charAt(l));
}
}elseif(getValue!
=0){//