我正在学习Java fx的初学者课程,我的任务是使用基于MVC模式的场景生成器创建一个简单的袖珍计算器。我理解模型和视图,但我不理解以下控制器中布尔值isTypeingNumber的用途。我的老师说,这应该用来检查用户是否输入了一个数字,这样他就不能在这段时间内执行任何其他操作,但我不明白他的意思,也不明白在这种情况下应该是什么意思。也许有人可以在这里给我一个解释。
最诚挚的问候~
控制器:
package application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
public class Controller {
@FXML
Text resultLabel;
boolean isTypingNumber = false;
double firstNumber = 0;
double secondNumber = 0;
String operation = "";
Model model = new Model();
public void numberTapped(ActionEvent event) { //When user tapps on a number
String value = ((Button)event.getSource()).getText();
if (isTypingNumber) {
resultLabel.setText(resultLabel.getText() + value);
} else {
resultLabel.setText(value);
isTypingNumber = true;
}
}
public void calculationTapped(ActionEvent event) { //When User clicks a + / - / * or /
isTypingNumber = false;
firstNumber = Double.parseDouble(resultLabel.getText());
operation = ((Button) event.getSource()).getText();
}
public void equalsTapped(ActionEvent event) { // When click on =
isTypingNumber = false;
secondNumber = Double.parseDouble(resultLabel.getText());
double result = model.calculate(firstNumber, secondNumber, operation);
resultLabel.setText(String.valueOf(result));
}
public void restartTapped(ActionEvent event ){ //When click on "C"
resultLabel.setText("0");
firstNumber = 0;
secondNumber = 0;
}
}
这里的模型也许可以更好地理解:
package application;
public class Model {
public double calculate(double number1, double number2, String operation) {
switch (operation) {
case "+":
return number1 + number2;
case "-":
return number1 - number2;
case "*":
return number1 * number2;
case "/":
if(number2 == 0) {
System.out.println("Durch 0 teilen geht nicht");
}
else {
return number1/number2;
}
}
return 0;
}
}
布尔值isTypingNumber
用于决定用户输入的数字是否应附加到resultLabel
中的文本或替换resultLabel
中的文本。
假设用户想要计算";22+33":
- 用户按下";2〃;。
isTypingNumber
为false,因此resultLabel
中的文本将被替换为"false";2〃;并且CCD_ 6被设置为真 - 用户按下";2〃;再一次
isTypingNumber
为真,因此数字被附加到resultLabel
中的文本,该文本现在包含"0";22〃 - 用户按下"+&";。这存储在
operation
中,firstNumber
更改为22,isTypingNumber
设置为false - 用户按下";3〃;。如果CCD_ 12中的文本被改变为";223〃;通过将";3〃;或者应该将其改为";3〃;通过替换内容?
isTypingNumber
回答了这个问题:它是假的,所以resultLabel
中的文本将被替换为"3〃
正是在第4步中,对isTypingNumber
的需求变得显而易见。
如果在步骤3中将resultLabel
中的文本更改为空字符串,则可能会删除isTypingNumber
,但IMHO会使用户界面变得尴尬:只要按下操作按钮,之前输入的数字就会消失。这意味着,如果用户试图进行几次计算("22+33=","3*15="(,他将需要按下其间的重新启动按钮。