...
- å koble FXML-koden til Java-koden med fx:id- og onAction-attributter
P.S.
Her er én av mange løsninger:
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 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();
}
} |