Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • å koble FXML-koden til Java-koden med fx:id- og onAction-attributter

P.S.

Her er én av mange løsninger:

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 value1 = 0.0;
	private String value2 = null;
	private String operator = null;
	@FXML
	TextField valueText;
	
	@FXML
	void initialize() {
		updateValueField();
	}
	private void updateValueField() {
		if (value2 != null) {
			valueText.setText(value2);
			validateValue2();
		} else {
			valueText.setText(String.valueOf(value1));
		}
	}
	@FXML
	void handleValueTextChanged(StringProperty prop, String oldValue, String newValue) {
		value2 = valueText.getText();
		validateValue2();
	}
	private void validateValue2() {
		try {
			Double.valueOf(value2);
			valueText.setStyle(null);
		} catch (NumberFormatException e) {
			valueText.setStyle("-fx-border-color: red;");
		}
	}
	private void appendToValue2(String s) {
		if (value2 == null) {
			value2 = "";
		}
		value2 = value2 + s;
		updateValueField();
	}
	private void performOperation() {
		if (value2 != null) {
			double val2 = Double.valueOf(value2);
			if (operator != null) {
				switch (operator) {
				case "/": value1 = value1 / val2; break;
				case "*": value1 = value1 * val2; break;
				case "+": value1 = value1 + val2; break;
				case "-": value1 = value1 - val2; break;
				}
				operator = null;
			} else {
				value1 = val2;
			}
			this.value2 = null;
		}
		updateValueField();
	}
	private void registerOperator(String op) {
		performOperation();
		operator = op;
		updateValueField();
	}
	
	@FXML
	void digit(ActionEvent event) {
		Button button = (Button) event.getSource();
		appendToValue2(button.getText());
	}
	
	@FXML void divide() {
		registerOperator("/");
	}
	@FXML void multiply() {
		registerOperator("*");
	}
	
	@FXML void add() {
		registerOperator("+");
	}
	@FXML void subtract() {
		registerOperator("-");
	}
	@FXML void desimalPoint() {
		appendToValue2(".");
	}
	@FXML void compute() {
		performOperation();
	}
}