package an; import java.awt.*;import java.awt.event.*; public class qq extends WindowAdapter implements ActionListener{ double dResult=0; double dNowInput=0; double dMemory; int n=0; //记载小数位数 int nOperation=1; // 记录运算符类型 int nBitsNum=0; //记录总共输入的位数 boolean alreadyHaveDot=false; //已经有小数点? boolean keyAvailable=true; boolean alreadyClickedEqueal=false; //是否按下过"="? boolean isTempNowInput=false; //是否在计算出结果后直接按运算符将结果赋给了当前输入值? Frame f; Panel p1,p2,p3,p4,p5,p6; TextField tf1,tf2; Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0; Button bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative; Button bBackspace,bCE,bC,bMR,bMS,bMC,bM; public void display() { f=new Frame("计算器"); f.setSize(280,213); f.setLocation(200,200); f.setBackground(Color.LIGHT_GRAY); f.setResizable(false); f.setLayout(new BorderLayout(3,3)); p1=new Panel(new GridLayout(1,3,5,5)); //用于存放backspace,ce,c三键 p2=new Panel(new GridLayout(4,5,5,5)); //用于存放数字区及附近共20键, 此处间隙设置可能不合理,以后调整 p3=new Panel(new GridLayout(5,1,5,5)); //用于存放MC,MR,MS,M+键及显示M状态文本框,此处间隙设置可能不合理,以后调整 p4=new Panel(new FlowLayout()); //用于存放p1,p2 p5=new Panel(new FlowLayout()); p6=new Panel(new FlowLayout()); p4.add(p1); p4.add(p2); tf1=new TextField(35); //存放显示区 tf1.setText("0."); tf1.setEditable(false); p5.add(tf1); f.add(p5,BorderLayout.NORTH); f.add(p4,BorderLayout.CENTER); f.add(p3,BorderLayout.WEST); b1=new Button("1"); b2=new Button("2"); b3=new Button("3"); b4=new Button("4"); b5=new Button("5"); b6=new Button("6"); b7=new Button("7"); b8=new Button("8"); b9=new Button("9"); b0=new Button("0"); 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); b0.addActionListener(this); bDiv=new Button("/"); bSqrt=new Button("sqrt"); bMulti=new Button("*"); bMinus=new Button("-"); bPercent=new Button("%"); bPlus=new Button("+"); bReciprocal=new Button("1/x"); bEqual=new Button("="); bDot=new Button("."); bNegative=new Button("+/-"); bDiv.addActionListener(this); bSqrt.addActionListener(this); bMulti.addActionListener(this); bMinus.addActionListener(this); bPercent.addActionListener(this); bPlus.addActionListener(this); bReciprocal.addActionListener(this); bEqual.addActionListener(this); bDot.addActionListener(this); bNegative.addActionListener(this); p2.add(b7); p2.add(b8); p2.add(b9); p2.add(bDiv); p2.add(bSqrt); p2.add(b4); p2.add(b5); p2.add(b6); p2.add(bMulti); p2.add(bPercent); p2.add(b1); p2.add(b2); p2.add(b3); p2.add(bMinus); p2.add(bReciprocal); p2.add(b0); p2.add(bNegative); p2.add(bDot); p2.add(bPlus); p2.add(bEqual); bBackspace=new Button("Backspace"); bCE=new Button("CE"); bC=new Button("C"); bBackspace.addActionListener(this); bCE.addActionListener(this); bC.addActionListener(this); p1.add(bBackspace); p1.add(bCE); p1.add(bC); tf2=new TextField(2); tf2.setEnabled(false); tf2.setBackground(Color.LIGHT_GRAY); bMC=new Button("MC"); bMR=new Button("MR"); bMS=new Button("MS"); bM=new Button("M+"); bMC.addActionListener(this); bMR.addActionListener(this); bMS.addActionListener(this); bM.addActionListener(this); p6.add(tf2); p3.add(p6); p3.add(bMC); p3.add(bMR); p3.add(bMS); p3.add(bM); f.setVisible(true); f.addWindowListener(this); } public void actionPerformed(ActionEvent e) { //key 0 to 9 if(this.keyAvailable && e.getActionCommand().length()==1 && e.getActionCommand().compareTo("0")>=0 && e.getActionCommand().compareTo("9")<=0) { if(this.isTempNowInput) { this.dNowInput=0; this.isTempNowInput=false; } this.nBitsNum++; if(this.alreadyHaveDot==false) this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand()); else { double temp=Double.parseDouble(e.getActionCommand()); for(int i=this.n;i<0;i++) { temp*=0.1; } this.dNowInput+=temp; this.n--; } this.tf1.setText(Double.toString(this.dNowInput)); } // key dot if(this.keyAvailable && e.getActionCommand()==".") { if(this.alreadyHaveDot==false) { this.nBitsNum++; this.alreadyHaveDot=true; this.n=-1; } } //key "+","-","*","/" if(this.keyAvailable && e.getActionCommand()=="+" || e.getActionCommand()=="-" || e.getActionCommand()=="*" || e.getActionCommand()=="/") { if(this.alreadyClickedEqueal) { this.dNowInput=this.dResult; this.isTempNowInput=true; } else { switch(this.nOperation) { case 1: this.dResult+=this.dNowInput; break; case 2: this.dResult-=this.dNowInput; break; case 3: this.dResult*=this.dNowInput; break; case 4: { if(this.dNowInput==0) { tf1.setText("除数不能为零"); this.keyAvailable=false; } else this.dResult=this.dResult/this.dNowInput; } } if(this.keyAvailable)tf1.setText(Double.toString(this.dResult)); this.dNowInput=0; } if(e.getActionCommand()=="+") { this.nOperation=1; } if(e.getActionCommand()=="-") { this.nOperation=2; } if(e.getActionCommand()=="*") { this.nOperation=3; } if(e.getActionCommand()=="/") { this.nOperation=4; } this.nBitsNum=0; this.alreadyClickedEqueal=false; } // key "+/-" if(this.keyAvailable && e.getActionCommand()=="+/-") { this.dNowInput=0-this.dNowInput; tf1.setText(Double.toString(this.dNowInput)); } // key "C" if(e.getActionCommand()=="C") { this.nBitsNum=0; this.dResult=0; this.dNowInput=0; this.alreadyHaveDot=false; this.n=0; this.nOperation=1; this.keyAvailable=true; this.alreadyClickedEqueal=false; tf1.setText("0."); } // key "CE" if(e.getActionCommand()=="CE") { this.nBitsNum=0; this.dNowInput=0; this.alreadyHaveDot=false; this.n=0; this.nOperation=1; this.keyAvailable=true; tf1.setText("0."); } // key "sqrt" if(this.keyAvailable && e.getActionCommand()=="sqrt") { if(this.alreadyClickedEqueal) { if(this.dResult>=0) { this.dResult=Math.sqrt(this.dResult); tf1.setText(Double.toString(this.dResult)); } else { tf1.setText("函数输入无效"); this.keyAvailable=false; } } else { if(this.dNowInput>=0) { this.dNowInput=Math.sqrt(this.dNowInput); tf1.setText(Double.toString(this.dNowInput)); } else { tf1.setText("函数输入无效"); this.keyAvailable=false; } } } // key "1/x" if(this.keyAvailable && e.getActionCommand()=="1/x") { if(this.dNowInput==0) { tf1.setText("除数不能为零"); this.keyAvailable=false; } else { this.dNowInput=1/this.dNowInput; tf1.setText(Double.toString(this.dNowInput)); } } // key "=" if(this.keyAvailable && e.getActionCommand()=="=") { this.alreadyClickedEqueal=true; switch(this.nOperation) { case 1: this.dResult+=this.dNowInput; break; case 2: this.dResult-=this.dNowInput; break; case 3: this.dResult*=this.dNowInput; break; case 4: { if(this.dNowInput==0) { tf1.setText("除数不能为零"); this.keyAvailable=false; } else this.dResult=this.dResult/this.dNowInput; } } if(this.keyAvailable)tf1.setText(Double.toString(this.dResult)); } // key "MS" if(this.keyAvailable && e.getActionCommand()=="MS") { this.dMemory=this.dNowInput; if(this.dMemory!=0) tf2.setText("M"); } // key "MC" if(this.keyAvailable && e.getActionCommand()=="MC") { this.dMemory=0; tf2.setText(""); } // key "MR" if(this.keyAvailable && e.getActionCommand()=="MR") { this.dNowInput=this.dMemory; tf1.setText(Double.toString(this.dNowInput)); } // key "M+" if(this.keyAvailable && e.getActionCommand()=="M+") { this.dMemory+=this.dNowInput; if(this.dMemory!=0) tf2.setText("M"); else tf2.setText(""); } // key "%" if(this.keyAvailable && e.getActionCommand()=="%") { this.dNowInput=(this.dResult*this.dNowInput)/100; tf1.setText(Double.toString(this.dNowInput)); } // key "Backspace" if(this.keyAvailable && e.getActionCommand()=="Backspace") { if(!this.alreadyClickedEqueal){ if(this.dNowInput!=0) { if(this.alreadyHaveDot) { if(this.n==-1) { this.alreadyHaveDot=false; this.n=0; } else { String str,str1; str=tf1.getText(); str1=str.substring(0,this.nBitsNum-1); this.nBitsNum--; this.n++; this.dNowInput=Double.parseDouble(str1); tf1.setText(Double.toString(this.dNowInput)); } } else { int temp; temp=(int)(this.dNowInput/10); this.dNowInput=(double)temp; tf1.setText(Double.toString(this.dNowInput)); } } } } } public static void main(String args[]) { qq cal=new qq(); cal.display(); } public void windowClosing(WindowEvent e) { System.exit(0); }}
java编写的计算器03
最新推荐文章于 2024-10-01 18:51:18 发布