From 6674f11baed0f2ef75805248553549f71e70d130 Mon Sep 17 00:00:00 2001 From: Harry Linrui XU <xulr0820@hotmail.com> Date: Sat, 1 Apr 2023 10:55:01 +0200 Subject: [PATCH] "Validate inputs for income" --- .../demo/controller/AddBudgetController.java | 1 + .../demo/controller/AddIncomeController.java | 27 ++++++++- src/main/resources/view/AddIncome.fxml | 55 ++++++++++++++++--- 3 files changed, 73 insertions(+), 10 deletions(-) diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/AddBudgetController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/AddBudgetController.java index c0f0a7e4..6a9891f5 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/AddBudgetController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/AddBudgetController.java @@ -112,6 +112,7 @@ public class AddBudgetController { * Closes the dialog box. * @param actionEvent A button click on the close button. */ + @FXML private void closeButton(ActionEvent actionEvent) { final Node source = (Node) actionEvent.getSource(); final Stage stage = (Stage) source.getScene().getWindow(); diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/AddIncomeController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/AddIncomeController.java index 9c96a53c..a1eebbbc 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/AddIncomeController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/AddIncomeController.java @@ -14,6 +14,7 @@ import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.DatePicker; import javafx.scene.control.TextField; +import javafx.scene.text.Text; import javafx.stage.Stage; import no.ntnu.idatt1002.demo.data.Economics.Expense; import no.ntnu.idatt1002.demo.data.Economics.Income; @@ -36,6 +37,8 @@ public class AddIncomeController { @FXML private Button okBtn; + @FXML + private Text errorMsg; @FXML private DatePicker datePicker; @@ -72,6 +75,8 @@ public class AddIncomeController { //Set date to today datePicker.setValue(LocalDate.now()); + + addEventFilters(); } public IncomeCategory getCategory() { @@ -121,7 +126,7 @@ public class AddIncomeController { @FXML public void pressOkBtn(ActionEvent event) { //Instantiates a new income - if (chosenIncome == null) { + if (newIncome == null) { LocalDate date = datePicker.getValue(); double amount = Double.parseDouble(amountField.getText()); String description = descriptionField.getText(); @@ -142,6 +147,26 @@ public class AddIncomeController { ((Stage) source.getScene().getWindow()).close(); } + private void addEventFilters() { + okBtn.addEventFilter( + ActionEvent.ACTION, event -> { + if (!validateInputs()) { + event.consume(); + errorMsg.setOpacity(1); + } + }); + } + private boolean validateInputs() { + try { + Income income = new Income( + Double.parseDouble(amountField.getText()), recurringBox.getValue(), + categoryBox.getValue(), datePicker.getValue()); + } catch (IllegalArgumentException e) { + System.out.println("ok"); + return false; + } + return true; + } /** * Closes the dialog box and cancels any pending changes. diff --git a/src/main/resources/view/AddIncome.fxml b/src/main/resources/view/AddIncome.fxml index abdfe7c2..b4167b44 100644 --- a/src/main/resources/view/AddIncome.fxml +++ b/src/main/resources/view/AddIncome.fxml @@ -11,6 +11,8 @@ <?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.text.Font?> +<?import javafx.scene.text.Text?> <DialogPane expanded="true" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1" fx:controller="no.ntnu.idatt1002.demo.controller.AddIncomeController"> <content> @@ -27,27 +29,62 @@ <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> - <Label text="Date:" /> - <Label text="Amount:" GridPane.rowIndex="1" /> - <Label text="Description:" GridPane.rowIndex="2" /> - <Label text="Category" GridPane.rowIndex="3" /> - <Label text="Recurring" GridPane.rowIndex="4" /> + <Label text="Date:"> + <font> + <Font name="Lucida Console" size="12.0" /> + </font> + </Label> + <Label text="Amount:" GridPane.rowIndex="1"> + <font> + <Font name="Lucida Console" size="12.0" /> + </font> + </Label> + <Label text="Description:" GridPane.rowIndex="2"> + <font> + <Font name="Lucida Console" size="12.0" /> + </font> + </Label> + <Label text="Category: " GridPane.rowIndex="3"> + <font> + <Font name="Lucida Console" size="12.0" /> + </font> + </Label> + <Label text="Recurring: " GridPane.rowIndex="4"> + <font> + <Font name="Lucida Console" size="12.0" /> + </font> + </Label> <TextField fx:id="amountField" promptText="100" GridPane.columnIndex="1" GridPane.rowIndex="1" /> <TextField fx:id="descriptionField" promptText="(optional)" GridPane.columnIndex="1" GridPane.rowIndex="2" /> - <ComboBox fx:id="categoryBox" prefWidth="150.0" promptText="Choose" GridPane.columnIndex="1" GridPane.rowIndex="3" /> + <ComboBox fx:id="categoryBox" prefWidth="150.0" promptText="Food" GridPane.columnIndex="1" GridPane.rowIndex="3" /> <ComboBox fx:id="recurringBox" prefWidth="150.0" promptText="No" GridPane.columnIndex="1" GridPane.rowIndex="4" /> - <HBox alignment="BOTTOM_RIGHT" prefHeight="100.0" prefWidth="200.0" spacing="10.0" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="5"> + <HBox alignment="BOTTOM_RIGHT" prefHeight="100.0" prefWidth="200.0" spacing="10.0" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="7"> <children> - <Button fx:id="cancelBtn" mnemonicParsing="false" onAction="#pressCancelBtn" prefHeight="25.0" prefWidth="60.0" text="Cancel" /> - <Button fx:id="okBtn" mnemonicParsing="false" onAction="#pressOkBtn" prefHeight="25.0" prefWidth="60.0" text="OK" /> + <Button fx:id="cancelBtn" mnemonicParsing="false" onAction="#pressCancelBtn" prefHeight="25.0" prefWidth="60.0" text="Cancel"> + <font> + <Font name="Lucida Console" size="12.0" /> + </font> + </Button> + <Button fx:id="okBtn" mnemonicParsing="false" onAction="#pressOkBtn" prefHeight="25.0" prefWidth="60.0" text="OK"> + <font> + <Font name="Lucida Console" size="12.0" /> + </font> + </Button> </children> <GridPane.margin> <Insets top="20.0" /> </GridPane.margin> </HBox> <DatePicker fx:id="datePicker" GridPane.columnIndex="1" /> + <Text fx:id="errorMsg" fill="#d90808" opacity="0.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Invalid inputs. Please make surce that amount is above 1 and that category and recurring have values" wrappingWidth="300.0" GridPane.columnSpan="3" GridPane.rowIndex="5" GridPane.rowSpan="2"> + <font> + <Font name="Lucida Console" size="11.0" /> + </font> + </Text> </children> </GridPane> </content> -- GitLab