优化删除的功能,显示计算记录的列表化

main
Admin 10 months ago
parent d16335da8e
commit b09c77dc2f

@ -1,4 +1,7 @@
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
@ -6,23 +9,30 @@ import javafx.event.ActionEvent;
public class CalculatorController { public class CalculatorController {
@FXML @FXML
private TextField inputField; private TextField inputField; // 用于显示输入
@FXML @FXML
private TextField inputField1; // 用于显示计算记录 private ListView<String> inputField1; // 用于显示计算记录
@FXML
private TextField inputField2;
private double firstNumber = 0; private double firstNumber = 0;
private String operator = ""; private String operator = "";
private boolean isOperationClicked = false; private boolean isOperationClicked = false;
private StringBuilder currentInput = new StringBuilder();
private ObservableList<String> operationHistory = FXCollections.observableArrayList();
@FXML @FXML
protected void handleNumberAction(ActionEvent event) { protected void handleNumberAction(ActionEvent event) {
Button button = (Button) event.getSource(); Button button = (Button) event.getSource();
String number = button.getText(); String number = button.getText();
if (isOperationClicked) { if (isOperationClicked) {
inputField.clear(); currentInput.setLength(0);
isOperationClicked = false; isOperationClicked = false;
} }
inputField.setText(inputField.getText() + number);
currentInput.append(number);
inputField.setText(currentInput.toString());
} }
@FXML @FXML
@ -51,14 +61,28 @@ public class CalculatorController {
} }
private void performOperation(String op) { private void performOperation(String op) {
firstNumber = Double.parseDouble(inputField.getText()); if (currentInput.length() > 0) {
// 如果当前输入不为空,先保存当前输入为第二个数字
if (firstNumber != 0 && !operator.isEmpty()) {
handleEqualAction(null); // 计算上一个结果
} else {
firstNumber = Double.parseDouble(currentInput.toString()); // 设置第一个数字
}
}
String firstNumberText = (firstNumber % 1 == 0) ? String.valueOf((int) firstNumber) : String.valueOf(firstNumber);
operator = op; operator = op;
currentInput.setLength(0); // 清空当前输入以便输入下一个数字
isOperationClicked = true; isOperationClicked = true;
inputField.setText(firstNumberText + " " + operator); // 显示当前操作
} }
@FXML @FXML
protected void handleEqualAction(ActionEvent event) { protected void handleEqualAction(ActionEvent event) {
double secondNumber = Double.parseDouble(inputField.getText()); if (currentInput.length() == 0 || operator.isEmpty()) {
return; // 如果没有输入或操作符,则不进行计算
}
double secondNumber = Double.parseDouble(currentInput.toString());
double result = 0; double result = 0;
switch (operator) { switch (operator) {
@ -86,37 +110,70 @@ public class CalculatorController {
return; return;
} }
inputField.setText(String.valueOf(result)); // 格式化输出结果
recordOperation(firstNumber, secondNumber, result); String resultText = (result % 1 == 0) ? String.valueOf((int) result) : String.valueOf(result);
inputField.setText(resultText);
recordOperation(firstNumber, secondNumber, Double.parseDouble(resultText));
firstNumber = result; // 使用当前结果作为下一个操作的第一个数字
currentInput.setLength(0); // 清空当前输入
operator = ""; // 重置操作符
isOperationClicked = false; // 重置操作标记
} }
private void recordOperation(double a, double b, double result) { private void recordOperation(double firstNumber, double secondNumber, double result) {
String operation = a + " " + operator + " " + b + " = " + result; // 检查结果是否为整数
inputField1.setText(inputField1.getText() + "\n" + operation); String formattedResult = (result % 1 == 0) ? String.valueOf((int) result) : String.valueOf(result);
//检查firstNumber是否为整数
String firstNumberText = (firstNumber % 1 == 0) ? String.valueOf((int) firstNumber) : String.valueOf(firstNumber);
//检查secondNumber是否为整数
String secondNumberText = (secondNumber % 1 == 0) ? String.valueOf((int) secondNumber) : String.valueOf(secondNumber);
String operation = firstNumberText + " " + operator + " " + secondNumberText + " = " + formattedResult;
// 更新计算记录,确保换行符的正确使用
operationHistory.add(operation);
inputField1.setItems(operationHistory);
} }
@FXML @FXML
protected void handleClearAction(ActionEvent event) { protected void handleClearAction(ActionEvent event) {
inputField.clear(); if (currentInput.length() > 0) {
firstNumber = 0; // 移除最后一个字符
currentInput.deleteCharAt(currentInput.length() - 1);
// 如果最后一个字符是空格且还有字符,继续删除空格(用于清理运算符后面的空格)
while (currentInput.length() > 0 && currentInput.charAt(currentInput.length() - 1) == ' ') {
currentInput.deleteCharAt(currentInput.length() - 1);
}
// 如果删除后为空且有操作符,则清空操作符
if (currentInput.length() == 0 && !operator.isEmpty()) {
operator = ""; operator = "";
isOperationClicked = false; }
inputField.setText(currentInput.toString());
}
} }
@FXML @FXML
protected void handleClearsAction(ActionEvent event) { protected void handleClearsAction(ActionEvent event) {
inputField1.clear(); currentInput.setLength(0);
firstNumber = 0;
operator = "";
inputField.clear();
} }
@FXML @FXML
protected void handlePointAction(ActionEvent event) { protected void handlePointAction(ActionEvent event) {
if (!inputField.getText().contains(".")) { if (currentInput.indexOf(".") == -1) { // 检查是否已有小数点
inputField.setText(inputField.getText() + "."); currentInput.append(".");
inputField.setText(currentInput.toString());
} }
} }
@FXML @FXML
protected void handleRemoveAction(ActionEvent event) { protected void handleRemoveAction(ActionEvent event) {
inputField1.clear(); operationHistory.clear();
inputField1.setItems(operationHistory);
} }
} }

@ -7,6 +7,7 @@
<?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<?import javafx.scene.control.ListView?>
<AnchorPane prefHeight="341.0" prefWidth="375.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171" fx:controller="CalculatorController"> <AnchorPane prefHeight="341.0" prefWidth="375.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171" fx:controller="CalculatorController">
<TextField fx:id="inputField" editable="false" layoutX="14.0" layoutY="14.0" prefHeight="80.0" prefWidth="210.0" /> <TextField fx:id="inputField" editable="false" layoutX="14.0" layoutY="14.0" prefHeight="80.0" prefWidth="210.0" />
@ -105,7 +106,7 @@
<Font size="15.0" /> <Font size="15.0" />
</font> </font>
</Button> </Button>
<TextField fx:id="inputField1" editable="false" layoutX="225.0" layoutY="99.0" prefHeight="230.0" prefWidth="140.0" /> <ListView fx:id="inputField1" layoutX="225.0" layoutY="99.0" prefHeight="230.0" prefWidth="140.0" />
<TextField fx:id="inputField2" editable="false" layoutX="230.0" layoutY="20.0" prefHeight="20.0" prefWidth="120.0" text="计算器计算记录" /> <TextField fx:id="inputField2" editable="false" layoutX="230.0" layoutY="20.0" prefHeight="20.0" prefWidth="120.0" text="计算器计算记录" />
<Button graphicTextGap="5.0" layoutX="250.0" layoutY="60.0" onAction="#handleRemoveAction" text="清空记录" wrapText="true"> <Button graphicTextGap="5.0" layoutX="250.0" layoutY="60.0" onAction="#handleRemoveAction" text="清空记录" wrapText="true">
<font> <font>

Loading…
Cancel
Save