Versions Compared

Key

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

...

Det er din oppgave! For å gjøre det litt lettere så viser vi her noen kode-snutter for småproblemer du sikkert vil støte på underveis. ...

ProblemKodeForklaring
Gjøre om fra tekst (String) to (desimal)tall (double)Double.valueOf(text)Du kaller Double-klassen sin valueOf-metode, for å konvertere en tekst til en double.
Gjøre om fra (desimal)tall til tekstString.valueOf(num) eller "" + numDu kaller enten String.valueOf, eller legger num til "", som konverterer num i samme slengen
Sjekke om en String-variabel er ingentingif (text != null) { ... }En bruker != null for å sjekke om er variabel er ingenting
Sjekke om en String-variabel er tomif (text.length() == 0) { ... }text.length() gir deg antall bokstaver i en String, så her sjekker vi om antall bokstaver er 0

Hva har du lært?

  • å koble FXML-koden til Java-koden med fx:id- og onAction-attributter
  • å organisere koden i flere mindre metoder
  • å skille mellom metoder som endrer interne variabler og de som oppdaterer app-vinduet 

P.S.

Her er én av mange løsningermanger løsninger som virker omtrent som foreslått over:

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 clearValueText() {
		valueText = null;
	}

	private void performOperationconvertAndStoreValueText() {
		if (value2 != null
		memory = Double.valueOf(valueText);
	}

	private void convertValueTextComputeAndStoreValue() {
			double val2value = Double.valueOf(value2valueText);
			ifswitch (operator != null) {
				switch (operator) {
		case "/": memory = memory / value; break;
		case "*": memory = memory * value; break;
		case "/+": value1memory = value1memory /+ val2value; break;
				case "*-": value1memory = value1memory *- val2value; break;
		}
	}

				case "+": value1 = value1 + val2; break;
				case "-": value1 = value1 - val2; break;
				}
				operator = nullprivate void storeOperator(String op) {
		operator = op;
	}

	@FXML
	void handleDigitButton(ActionEvent event) {
		Button button = (Button) event.getSource();
		append2ValueText(button.getText());
		updateValueField();
	}

	@FXML
	void handleOperatorButton(ActionEvent event) {
		if (valueText != null) {
			if (operator != null) {
				convertValueTextComputeAndStoreValue();
			} else {
				value1 = val2convertAndStoreValueText();
			}
			this.value2 = null;
		}
		updateValueFieldclearValueText();
	}
	privateButton button void= registerOperator(String opButton) {
		performOperationevent.getSource();
		operator = opstoreOperator(button.getText());
		updateValueField();
	}
	
	@FXML
	void digithandleDesimalPoint(ActionEvent event) {
		Button button = (Button) event.getSource(append2ValueText(".");
		appendToValue2updateValueField(button.getText());
	}

	@FXML
	void handleComputeButton() {
	@FXML void divide(		if (valueText != null && operator != null) {
		registerOperator	convertValueTextComputeAndStoreValue("/");
		}
	@FXML void multiply	clearValueText() {;
		registerOperator("*"	storeOperator(null);
		}
		updateValueField();
	@FXML void add() {
		registerOperator("+");
	}
	@FXML void subtract(}
	// manuell redigering av valueTextField

	@FXML
	void handleValueTextFieldChange(StringProperty prop, String oldValue, String newValue) {
		registerOperator("-");
	}
	@FXML void desimalPoint() {
		appendToValue2(".");
	}
	@FXML void compute() {
		performOperation();if (valueText != null && (! newValue.equals(valueText))) {
			valueText = newValue;
			validateValueTextField();
		}
	}
}