该函数的具体实现代码如下:
//定义控件触发时集中处理函数 public static void Numbers_Cliked() { //如果点击在运算操作符 if (OperationCliked) { //如果点击了小数点 if (DotCliked) { lastPrecisionNum *=0.1; double strDotnum = ControlNum*lastPrecisionNum; INumSecond += strDotnum; } else { INumSecond = INumSecond*10 + ControlNum; } setOutput2 = ""; setOutput2 +=INumSecond; //return setOutput2; } //如果没有点击运算操作符 else { if (DotCliked) { lastPrecisionNum *=0.1; double strDotnum = ControlNum*lastPrecisionNum; INumSecond += strDotnum; } else { INumSecond = INumSecond*10 + ControlNum; } setOutput = ""; setOutput +=INumSecond; //return setOutput; } }
.
操作符点击后数据转换赋值函数
=================================================================================
当我们点击了运算操作符之后,说明我们的第一个数据已经输入完成了,这个时候,我们将要输入的是第二个数据,这时候我们就需要进行数据的赋值转换,因为我们最开始的时候是使用INumsecand这个变量来接收数据的,所以在点击运算操作符之后,我们需要将INumsecand的值赋给INumfirst,并将INumsecand的值赋于0,重新接收第二个数据。
你可能会问,为什么不直接使用INumfirst接收第一个数据,使用INumsecand接收第二个数据,原因是因为,当你点击数字控件时,我们无法判断你输入的数据是第一个数据还是第二个数据,我们只能将你输入的数据统一的赋值给某一个变量,在这里这个变量就是INumsecand,只有我们判断到当点击了运算操作符之后,说明我们的上一个数据已经输入完成了,这时候才需要我们将INumsecand赋值给INumfirst,来说明我们得到了第一个数据。
该函数的实现代码如下:
//定义操作符点击后数据转换赋值的函数 public static void Operation_Cliked() { INumFirst = INumSecond; //将第一次键入的值赋给第一个数 INumSecond = 0; //将接收输入数值的变量赋值于0 DotCliked = false; //将布尔型小数点变量赋初值为:未点击 lastPrecisionNum = 1; }
.
计算器窗口界面函数
============================================================================
在这两个函数完成之后,就是我们计算器的界面设计函数了,
在该函数中,我们需要对计算器的整体界面进行布局设计,同时还需要对每一个控件添加监控,当我们点击相应的控件的时候,可以触发相应的事件操作。
运算符控件
如我们点击加法按键时,需要将我们第一次输入的数据和加法运算符输出出来,并且调用操作符点击后数据转换赋值的函数,来进行数据的赋值转换。
//设置加法按键+ JButton add_bt = new JButton("+"); add_bt.setBounds(5, 110, 80, 40); add_bt.setFont(font); container.add(add_bt); //添加单击监控 add_bt.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub Operation = "+"; setOutput += Operation + "\n"; text.setText(setOutput); //数值和运算符输出 OperationCliked = true; Operation_Cliked(); //调用操作符点击后数据转换赋值的函数 } });
数字控件
当我们点击数字0-9时,说明我们正在进行数值的输入,这个时候就需要获取到相应控件上的数值,并且调用控件触发时集中处理函数,将我们键入的数字进行赋值。
以控件数字7为例,在这里我使用num_7.getText()来获取当前所点击控件的文本,其实这是比较笨的一种方法,需要对每一个控件使用该函数,还有一种方法是获取当前焦点所在的控件,并且获取其文本,对这种方法熟悉的小伙伴可以留言大灰狼一起交流。
下面是数字7控件的相应触发代码:
JButton num_7 = new JButton("7"); num_7.setBounds(5, 200, 80, 40); num_7.setFont(font); container.add(num_7); num_7.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub String strNum = num_7.getText(); ControlNum = java.lang.Double.parseDouble(strNum); Numbers_Cliked(); //调用数值控件触发集中处理函数 text.setText(setOutput + setOutput2); //文本框输出 } });
其他数字控件与其类似。
小数点控件
当我们点击小数点的时候,说明我们输入的数据存在小数位,这个时候我们就需要对其作出相应的操作,如我们在点击运算操作符之前点击的小数点控件,则将小数点显示在文本框的第一行,表示第一个数是一个小数,如果我们是在点击运算操作符之后点击的小数点控件,则需要将小数点显示在文本框的第二行,表示我们输入的第二个数是小数。
具体实现代码如下:
//设置小数点按钮 JButton num_dot = new JButton("."); num_dot.setBounds(175, 335, 80, 40); num_dot.setFont(font); container.add(num_dot); num_dot.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent arg0) { // TODO Auto-generated method stub } @Override public void focusGained(FocusEvent arg0) { // TODO Auto-generated method stub if (OperationCliked) { setOutput2 += "."; text.setText(setOutput + setOutput2); DotCliked = true; } else { setOutput += "."; text.setText(setOutput + setOutput2); DotCliked = true; } } });
等号控件
当我们点击等号控件的时候,说明我们的数据和运算符的输入已经完成了,接下来我们就只需要根据我们键入的运算符进行判断,并进行相应的运算即可,同时在得到结果之后,我们还应将之前定义的所有变量赋予初值,方便我们进行下次输入。
实现代码如下:
//设置等号按钮 JButton num_equ = new JButton("="); num_equ.setBounds(260, 110, 80, 130); num_equ.setFont(font); container.add(num_equ); num_equ.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub switch (Operation) { case "+": IResult = INumFirst + INumSecond; break; case "-": IResult = INumFirst - INumSecond; break; case "*": IResult = INumFirst * INumSecond; break; case "/": IResult = INumFirst / INumSecond; break; case "X2": IResult = INumFirst * INumFirst; break; case "X3": IResult = INumFirst * INumFirst * INumFirst; break; default: break; } if (Operation == "X2" ) { setOutput = INumFirst + "*" + INumFirst + "\n"; String strIResult = java.lang.Double.toString(IResult); setOutput2 = strIResult; text.setText(setOutput + setOutput2); } if (Operation == "X3" ) { setOutput = INumFirst + "*" + INumFirst + "*" + INumFirst + "\n"; ### 最后 **如果大家需要这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档的话,[可以戳这里即可免费获取!](https://gitee.com/vip204888/java-p7)** 祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!! 感谢大家的支持!! ![image.png](https://upload-images.jianshu.io/upload_images/24616006-a60d2dca988e7086.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)