import javafx.application.Application; import javafx.beans.binding.Bindings; import javafx.beans.property.*; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.stage.Stage; public class Main extends Application { private TextField display = new TextField(); private Button[] numberButtons = new Button[10]; private Button addButton, subtractButton, multiplyButton, divideButton, modulusButton, equalsButton, clearButton; private Label statusLabel = new Label(""); private SimpleDoubleProperty firstOperand = new SimpleDoubleProperty(0); private SimpleDoubleProperty secondOperand = new SimpleDoubleProperty(0); private String operator = ""; @Override public void start(Stage primaryStage) { GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); display.setEditable(false); grid.add(display, 0, 0, 4, 1); for (int i = 0; i < 10; i++) { numberButtons[i] = new Button(String.valueOf(i)); grid.add(numberButtons[i], (i % 3), (i / 3) + 1); } addButton = new Button("+"); subtractButton = new Button("-"); multiplyButton = new Button("*"); divideButton = new Button("/"); modulusButton = new Button("%"); equalsButton = new Button("="); clearButton = new Button("C"); grid.add(addButton, 3, 1); grid.add(subtractButton, 3, 2); grid.add(multiplyButton, 3, 3); grid.add(divideButton, 3, 4); grid.add(modulusButton, 3, 5); grid.add(equalsButton, 3, 6); grid.add(clearButton, 3, 7); for (int i = 0; i < 10; i++) { int finalI = i; numberButtons[i].setOnAction(e -> display.appendText(String.valueOf(finalI))); } addButton.setOnAction(e -> setOperator("+")); subtractButton.setOnAction(e -> setOperator("-")); multiplyButton.setOnAction(e -> setOperator("*")); divideButton.setOnAction(e -> setOperator("/")); modulusButton.setOnAction(e -> setOperator("%")); equalsButton.setOnAction(e -> calculate()); clearButton.setOnAction(e -> clear()); Scene scene = new Scene(grid, 300, 400); primaryStage.setTitle("Calculator"); primaryStage.setScene(scene); primaryStage.show(); } private void setOperator(String op) { if (!operator.isEmpty()) { calculate(); } operator = op; firstOperand.setValue(Double.parseDouble(display.getText())); display.clear(); } private void calculate() { if (!operator.isEmpty()) { secondOperand.setValue(Double.parseDouble(display.getText())); double result = 0; switch (operator) { case "+": result = firstOperand.get() + secondOperand.get(); break; case "-": result = firstOperand.get() - secondOperand.get(); break; case "*": result = firstOperand.get() * secondOperand.get(); break; case "/": if (secondOperand.get() != 0) { result = firstOperand.get() / secondOperand.get(); } else { statusLabel.setText("Cannot divide by zero"); return; } break; case "%": result = firstOperand.get() % secondOperand.get(); break; } display.setText(String.format("%.2f", result)); operator = ""; } } private void clear() { display.clear(); firstOperand.setValue(0); secondOperand.setValue(0); operator = ""; } public static void main(String[] args) { launch(args); } }