Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

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
languagejava
collapsetrue
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();
		}
	}
}