java简单模仿win10计算器
本文实例为大家分享了Java实现win10计算器的具体代码,供大家参考,具体内容如下
这个小demo是我上学时的远古代码(嘻嘻嘻),今天整理代码时看到的,看着以前的代码,突然感觉这些是啥?看不懂了都,而且写得也不规范。
运行一下,还是可以的,先截张图
试了一下,bug还是有的,但是可以基本的运算,有兴趣的可以试一下
代码就贴在这里:
packagecom.waking.call; importjava.awt.BorderLayout; importjava.awt.Dimension; importjava.awt.Font; importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JLabel; importjavax.swing.JPanel; importjavax.swing.SwingConstants; /** *计算器小案例 *@authorwaking * */ publicclassCalculatorExample{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub CalculatorFramecalculatorFrame=newCalculatorFrame(); } } classCalculatorFrameextendsJFrame{ publicCalculatorFrame(){//构造函数 setTitle("计算器"); setSize(340,500); CalcultorPanelcalcultorPanel=newCalcultorPanel(); getContentPane().add(calcultorPanel);//给当前Frame添加面板 setLocationRelativeTo(null);//居中 setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } } classCalcultorPanelextendsJPanel{//主面板 publicstaticbooleanstart=true;//新数字键输入的开始 publicstaticStringresult="";//保存中间结果的参数 publicstaticStringlastcommand="=";//记录上一个运算符 publicstaticbooleanfirstDigit=true;//输入第一个数 publicCalcultorPanel(){ setLayout(newBorderLayout()); ShowPanelshowPanel=newShowPanel(); BTNPanelbtnPanel=newBTNPanel(); add(showPanel,BorderLayout.NORTH); add(btnPanel,BorderLayout.CENTER); } } classShowPanelextendsJPanel{//结果面板 publicstaticJLabeldisplay1; publicstaticJLabeldisplay2; publicShowPanel(){ display1=newJLabel("",SwingConstants.RIGHT); display2=newJLabel("0",SwingConstants.RIGHT); display1.setFont(newFont("黑体",Font.BOLD,30)); display2.setFont(newFont("黑体",Font.BOLD,40)); display1.setPreferredSize(newDimension(300,80)); display2.setPreferredSize(newDimension(300,50)); setLayout(newBorderLayout()); add(display1,BorderLayout.NORTH); add(display2,BorderLayout.CENTER); } } classBTNPanelextendsJPanel{//按钮面板 publicBTNPanel(){ setLayout(newGridLayout(6,4)); InsertAcitoninsertAciton=newInsertAciton(); CommandActioncommandAction=newCommandAction(); addButton("%",commandAction); addButton("√",commandAction); addButton("pow",commandAction); addButton("1/x",commandAction); addButton("CE",commandAction); addButton("C",commandAction); addButton("<<",commandAction); addButton("/",commandAction); addButton("7",insertAciton); addButton("8",insertAciton); addButton("9",insertAciton); addButton("*",commandAction); addButton("4",insertAciton); addButton("5",insertAciton); addButton("6",insertAciton); addButton("-",commandAction); addButton("1",insertAciton); addButton("2",insertAciton); addButton("3",insertAciton); addButton("+",commandAction); addButton("+/-",commandAction); addButton("0",insertAciton); addButton(".",insertAciton); addButton("=",commandAction); } voidaddButton(Stringlabel,ActionListeneractionListener){//添加按钮 JButtonbutton=newJButton(label); button.setFont(newFont("黑体",Font.BOLD,15)); button.addActionListener(actionListener); add(button); } } classInsertAcitonimplementsActionListener{//数字键按钮事件 @Override publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub if(CalcultorPanel.start==true){ //清空文本 ShowPanel.display1.setText(""); ShowPanel.display2.setText(""); CalcultorPanel.start=false; } if("0123456789.".indexOf(e.getActionCommand())>=0){ if(CalcultorPanel.firstDigit){ //输入的第一个数字 if(e.getActionCommand().equals(".")){//如果第一个是“.” ShowPanel.display2.setText("0."); }elseif(e.getActionCommand().equals("0")){//如果第一个是“0” ShowPanel.display2.setText("0"); CalcultorPanel.firstDigit=true; return; } elseShowPanel.display2.setText(e.getActionCommand()); } elseif((e.getActionCommand().equals("."))&&(ShowPanel.display2.getText().indexOf(".")<0)){ //输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面 ShowPanel.display2.setText(ShowPanel.display2.getText()+"."); } else//if(Double.parseDouble(ShowPanel.display2.getText())!=0) if(!e.getActionCommand().equals(".")){ //如果输入的不是小数点,则将数字附在结果文本框的后面 ShowPanel.display2.setText(ShowPanel.display2.getText()+e.getActionCommand()); } //以后输入的肯定不是第一个数字了 CalcultorPanel.firstDigit=false; } } } classCommandActionimplementsActionListener{//功能事件 publicvoidactionPerformed(ActionEvente){ //TODOAuto-generatedmethodstub Stringstring=e.getActionCommand(); if(string.equals("CE")){ ShowPanel.display1.setText(""); ShowPanel.display2.setText("0"); }elseif(string.equals("C")){ CalcultorPanel.start=true;//新数字键输入的开始 CalcultorPanel.result="";//保存中间结果的参数 CalcultorPanel.lastcommand="=";//记录上一个运算符 CalcultorPanel.firstDigit=true;//输入第一个数 ShowPanel.display1.setText(""); ShowPanel.display2.setText("0"); }elseif(string.equals("<<")){//退格 ShowPanel.display1.setText(""); Stringtext=ShowPanel.display2.getText(); inti=text.length(); if(i>0){ //退格,将文本最后一个字符去掉 text=text.substring(0,i-1); if(text.length()==0){ //如果文本没有了内容,则初始化计算器的各种值 ShowPanel.display2.setText("0"); CalcultorPanel.firstDigit=true; CalcultorPanel.lastcommand="="; }else{ //显示新的文本 ShowPanel.display2.setText(text); } } }elseif(string.equals("+/-")){ Stringa1=ShowPanel.display2.getText(); ShowPanel.display1.setText(""); if(a1.indexOf("-")==-1){ if(Double.parseDouble(a1)!=0) ShowPanel.display2.setText("-"+ShowPanel.display2.getText()); } else{ ZeroText(Double.parseDouble(a1)*-1); } CalcultorPanel.result=a1; }else{ CalcultorPanel.start=true;//新数字键的输入 if(CalcultorPanel.lastcommand.equals("="))//做一次运算 { CalcultorPanel.result=ShowPanel.display2.getText();//获取操作数1 } else{ if(CalcultorPanel.lastcommand.equals("%")){ //百分号运算,除以100 doublea1=Double.parseDouble(CalcultorPanel.result); a1=a1/100; if(CalcultorPanel.result=="0.")//去除0.问题 ShowPanel.display1.setText(0+"/100"+"="); elseShowPanel.display1.setText(CalcultorPanel.result+"/100="); ZeroText(a1); CalcultorPanel.result=a1+""; }elseif(CalcultorPanel.lastcommand.equals("√")){ //平方根运算 doublea1=Double.parseDouble(CalcultorPanel.result); a1=Math.sqrt(a1); if(CalcultorPanel.result=="0.")//去除0.问题 ShowPanel.display1.setText("√("+0+")"+"="); elseShowPanel.display1.setText("√"+"("+CalcultorPanel.result+")="); ZeroText(a1); CalcultorPanel.result=a1+""; }elseif(CalcultorPanel.lastcommand.equals("pow")){ doublea1=Double.parseDouble(CalcultorPanel.result); doublea2=Double.parseDouble(ShowPanel.display2.getText()); doubles=Math.pow(a1,a2); if(CalcultorPanel.result=="0."){//去除0.问题 if(ShowPanel.display2.getText()=="0.") ShowPanel.display1.setText("pow("+0+","+0+")"+"="); elseShowPanel.display1.setText("pow("+0+","+ShowPanel.display2.getText()+")"+"="); }elseif(ShowPanel.display2.getText()=="0."){ ShowPanel.display1.setText("pow("+CalcultorPanel.result+","+0+")"+"="); }else ShowPanel.display1.setText("pow"+"("+CalcultorPanel.result+","+ShowPanel.display2.getText()+")="); ZeroText(s); CalcultorPanel.result=a1+""; }elseif(CalcultorPanel.lastcommand.equals("1/x")){ //倒数运算 doublea1=Double.parseDouble(CalcultorPanel.result); if(a1==0.0){ //操作不合法 ShowPanel.display2.setText("零没有倒数"); }else{ a1=1/a1; ShowPanel.display1.setText("1"+"/"+CalcultorPanel.result+"="); ZeroText(a1); CalcultorPanel.result=a1+""; } } elseif(CalcultorPanel.lastcommand.equals("+")){ doublea1=Double.parseDouble(CalcultorPanel.result); doublea2=Double.parseDouble(ShowPanel.display2.getText()); doubles=a1+a2; if(CalcultorPanel.result=="0."){//去除0.问题 if(ShowPanel.display2.getText()=="0.") ShowPanel.display1.setText(0+"+"+0+"="); elseShowPanel.display1.setText(0+"+"+ShowPanel.display2.getText()+"="); }elseif(ShowPanel.display2.getText()=="0."){ ShowPanel.display1.setText(CalcultorPanel.result+"+"+0+"="); }else ShowPanel.display1.setText(CalcultorPanel.result+"+"+ShowPanel.display2.getText()+"="); ZeroText(s); CalcultorPanel.result=s+""; } elseif(CalcultorPanel.lastcommand.equals("-")){ doublea1=Double.parseDouble(CalcultorPanel.result); doublea2=Double.parseDouble(ShowPanel.display2.getText()); doubles=a1-a2; if(CalcultorPanel.result=="0."){//去除0.问题 if(ShowPanel.display2.getText()=="0.") ShowPanel.display1.setText(0+"-"+0+"="); elseShowPanel.display1.setText(0+"-"+ShowPanel.display2.getText()+"="); }elseif(ShowPanel.display2.getText()=="0."){ ShowPanel.display1.setText(CalcultorPanel.result+"-"+0+"="); }else ShowPanel.display1.setText(CalcultorPanel.result+"-"+ShowPanel.display2.getText()+"="); ZeroText(s); CalcultorPanel.result=s+""; }elseif(CalcultorPanel.lastcommand.equals("*")){ doublea1=Double.parseDouble(CalcultorPanel.result); doublea2=Double.parseDouble(ShowPanel.display2.getText()); doubles=a1*a2; if(CalcultorPanel.result=="0."){//去除0.问题 if(ShowPanel.display2.getText()=="0.") ShowPanel.display1.setText(0+"*"+0+"="); elseShowPanel.display1.setText(0+"*"+ShowPanel.display2.getText()+"="); }elseif(ShowPanel.display2.getText()=="0."){ ShowPanel.display1.setText(CalcultorPanel.result+"*"+0+"="); }else ShowPanel.display1.setText(CalcultorPanel.result+"*"+ShowPanel.display2.getText()+"="); ZeroText(s); CalcultorPanel.result=s+""; }elseif(CalcultorPanel.lastcommand.equals("/")){ //除法运算 //如果当前结果文本框中的值等于0 doublea1=Double.parseDouble(CalcultorPanel.result); doublea2=Double.parseDouble(ShowPanel.display2.getText()); if(a2==0.0){ //操作不合法 ShowPanel.display2.setText("除数不能为零"); }else{ doubles=a1/a2; if(CalcultorPanel.result=="0.")//去除0.问题 ShowPanel.display1.setText(0+"/"+ShowPanel.display2.getText()+"="); elseShowPanel.display1.setText(CalcultorPanel.result+"/"+ShowPanel.display2.getText()+"="); ZeroText(s); CalcultorPanel.result=s+""; } } }CalcultorPanel.lastcommand=e.getActionCommand();//获取当前的运算符 CalcultorPanel.firstDigit=true; } } publicvoidZeroText(doubles){ longt1; doublet2; t1=(long)s; t2=s-t1; if(t2==0){ ShowPanel.display2.setText(String.valueOf(t1)); }else{ ShowPanel.display2.setText(String.valueOf(s)); } } }
- 不要介意我把类写在一起,因为那时我为什么写在一起,我现在也不知道了呀!
- 有兴趣的你可以研究研究,感谢您的观看。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。