...
Her er én av manger løsninger som virker omtrent som foreslått over (men bruker litt andre navn på variabler og metoder):
Code Block | ||||
---|---|---|---|---|
| ||||
package kalkulator; import javafx.beans.property.StringProperty; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TextField; public class KalkulatorController { private double value1memory = 0.0; private String value2valueText = null; private String operator = null; @FXML TextField valueTextvalueTextField; @FXML void initialize() { updateValueField(); } private void updateValueField() { if (value2valueText != null) { valueTextvalueTextField.setText(value2valueText); validateValue2validateValueTextField(); } else { valueTextvalueTextField.setText(String.valueOf(value1memory)); } } @FXML private void handleValueTextChanged(StringProperty prop, String oldValue, String newValuevalidateValueTextField() { value2 = valueText.getText();try { validateValue2(); } private void validateValue2() { try { // prøv å konvertere teksten i tekstfeltet Double.valueOf(valueTextField.getText(value2)); valueTextvalueTextField.setStyle(null); } catch (NumberFormatExceptionException e) { valueTextvalueTextField.setStyle("-fx-border-color: red;"); } } private void appendToValue2append2ValueText(String s) { if (value2valueText == null) { value2valueText = ""; } value2valueText = value2valueText + s; updateValueField(); } private void performOperationclearValueText() { ifvalueText (value2 != null) {; } double val2private void convertAndStoreValueText() { memory = Double.valueOf(value2valueText); if (operator != null} private void convertValueTextComputeAndStoreValue() { double value = Double.valueOf(valueText); switch (operator) { case "/": value1memory = value1memory / val2value; break; case "*": value1memory = value1memory * val2value; break; case "+": value1memory = value1memory + val2value; break; case "-": value1memory = value1memory - val2value; break; } } operator = null; } elseprivate void storeOperator(String op) { value1operator = val2op; } this.value2 = null; }@FXML updateValueField(); } private void registerOperatorhandleDigitButton(StringActionEvent opevent) { performOperation(Button button = (Button) event.getSource(); operator = opappend2ValueText(button.getText()); updateValueField(); } @FXML void digithandleOperatorButton(ActionEvent event) { Buttonif button(valueText != (Buttonnull) event.getSource();{ if (operator != null) { appendToValue2(button.getText() convertValueTextComputeAndStoreValue(); } @FXML} voidelse divide() { registerOperator("/" convertAndStoreValueText(); } } @FXML void multiply() { registerOperator("*" clearValueText(); Button button = (Button) event.getSource(); storeOperator(button.getText()); updateValueField(); } @FXML @FXML void addhandleDesimalPoint() { registerOperatorappend2ValueText("+."); } @FXML void subtract updateValueField(); } @FXML void handleComputeButton() { registerOperator("-"); } @FXML void desimalPoint(if (valueText != null && operator != null) { appendToValue2convertValueTextComputeAndStoreValue("."); } @FXML void compute clearValueText() {; performOperation storeOperator(null); } updateValueField(); } // manuell redigering av valueTextField @FXML void handleValueTextFieldChange(StringProperty prop, String oldValue, String newValue) { if (valueText != null && (! newValue.equals(valueText))) { valueText = newValue; validateValueTextField(); } } } |