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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。