当我们点击了运算操作符之后,说明我们的第一个数据已经输入完成了,这个时候,我们将要输入的是第二个数据,这时候我们就需要进行数据的赋值转换,因为我们最开始的时候是使用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) {
// TO
DO 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”;
String strIResult = java.lang.Double.toString(IResult);
setOutput2 = strIResult;
text.setText(setOutput + setOutput2);
}
else {
setOutput = INumFirst + " " + Operation + " " + INumSecond + “\n”;
String strIResult = java.lang.Double.toString(IResult);
setOutput2 = strIResult;
text.setText(setOutput + setOutput2);
}
//计算结束,将变量赋予初值
setOutput = “”; //定义文本框输出
setOutput2 = “”;
INumFirst = 0;
INumSecond = 0;
IResult = 0.0; //定义结果
Operation = “”; //定义操作符
OperationCliked = false; //定义布尔类型判断操作符是否单击
DotCliked = false; //定义布尔类型判断小数点是否单击
lastPrecisionNum = 1; //定义小数点最后一位的精度为1
ControlNum = 0; //获取当前控件的数值
}
});

清空按钮


最后一个需要设置的控件就是清空按钮,当我们点击该控件时,之前输入的所有东西都将会被清空,所有的变量都将会被赋予初值。

实现代码如下:

//设置清空按钮
JButton num_empty = new JButton(“CE”);
num_empty.setBounds(260, 245, 80, 130);
num_empty.setFont(font);
container.add(num_empty);
num_empty.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
setOutput = “”; //定义文本框输出
setOutput2 = “”;
INumFirst = 0.0; //获取第一次输入的数值
INumSecond = 0.0; //获取第二次输入的数值
IResult = 0.0; //定义结果
Operation = “”; //定义操作符
OperationCliked = false; //定义布尔类型判断操作符是否单击
DotCliked = false; //定义布尔类型判断小数点是否单击
lastPrecisionNum = 1; //定义小数点最后一位的精度为1
ControlNum = 0; //获取当前控件的数值
text.setText(“0”);
}
});

在计算器的设计界面这些基本的控件操作完成之后,我们的计算器窗口界面函数就基本完成了。之后我们只需要在主方法中调用该函数即可实现Java计算器的运行,

.

主方法调用

========================================================================

主方法调用代码如下:

public static void main(String[] args) {
// TODO Auto-generated method stub
new Calculator_main().window(“计算器”);
}

实现效果:

JAVA服务交互图_面试