From 8eb43a5e66b3db7aa080ef26f36f4ba939126ae7 Mon Sep 17 00:00:00 2001 From: Harry Linrui XU <xulr0820@hotmail.com> Date: Wed, 22 Mar 2023 13:30:48 +0100 Subject: [PATCH] Implemented delete functionality using an alert box --- .../demo/controller/ExpensesController.java | 35 ++++++++++++++----- src/main/resources/view/Expenses.fxml | 6 ++-- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java index d7dbaf99..2acd76a3 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java @@ -3,6 +3,7 @@ package no.ntnu.idatt1002.demo.controller; import java.io.File; import java.io.IOException; +import java.util.Optional; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; @@ -11,7 +12,10 @@ import javafx.fxml.FXMLLoader; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; +import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; import javafx.scene.control.Dialog; import javafx.scene.control.TableColumn; @@ -37,15 +41,15 @@ public class ExpensesController { private DialogMode mode; @FXML - private Button add; + private Button addBtn; @FXML private TextField descriptionField; @FXML - private Button edit; + private Button editBtn; @FXML - private Button delete; + private Button deleteBtn; @FXML private ComboBox<String> show; @@ -77,10 +81,10 @@ public class ExpensesController { show.setItems(filter); show.setValue("All"); - + Expense newExpense = new Expense(99, true, ExpenseCategory.FOOD, "1/1/23"); + expenseRegister.addItem(newExpense); expenses = FXCollections.observableArrayList(expenseRegister.getItems()); - dateColumn.setCellValueFactory(new PropertyValueFactory<Expense, String>("date")); amountColumn.setCellValueFactory(new PropertyValueFactory<Expense, Double>("amount")); categoryColumn.setCellValueFactory(new PropertyValueFactory<Expense, ExpenseCategory>("category")); @@ -116,11 +120,11 @@ public class ExpensesController { // Get the controller for the loaded FXML file AddExpenseController dialogController = loader.getController(); - if (event.getSource().equals(add)) { + if (event.getSource().equals(addBtn)) { mode = DialogMode.ADD; dialogTitle = "Add expense"; - } else if (event.getSource().equals(edit) && expenseTableView.getSelectionModel().getSelectedItem() != null) { + } else if (event.getSource().equals(editBtn) && expenseTableView.getSelectionModel().getSelectedItem() != null) { mode = DialogMode.EDIT; dialogTitle = "Edit expense"; newExpense = expenseTableView.getSelectionModel().getSelectedItem(); @@ -151,8 +155,23 @@ public class ExpensesController { } - public void handleDeleteButton(ActionEvent event) throws IOException { + @FXML + public void handleDeleteBtn(ActionEvent event) { + Optional<ButtonType> isConfirmed = showConfirmationDialog("Confirm Delete", "Delete Confirmation", + "Are you sure you would like to delete the selected expense?"); + if (isConfirmed.isPresent() && isConfirmed.get() == ButtonType.OK) { + int selectedIdx = expenseTableView.getSelectionModel().getSelectedIndex(); + expenses.remove(selectedIdx); + } + } + + private Optional<ButtonType> showConfirmationDialog(String title, String headerText, String contentText) { + Alert alert = new Alert(AlertType.CONFIRMATION); + alert.setTitle(title); + alert.setHeaderText(headerText); + alert.setContentText(contentText); + return alert.showAndWait(); } public void loadDataFromFile(String fileName) { diff --git a/src/main/resources/view/Expenses.fxml b/src/main/resources/view/Expenses.fxml index 107ddd16..7985d641 100644 --- a/src/main/resources/view/Expenses.fxml +++ b/src/main/resources/view/Expenses.fxml @@ -73,7 +73,7 @@ <children> <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0"> <children> - <Button fx:id="add" alignment="TOP_CENTER" mnemonicParsing="false" onAction="#handleAddButton" text="Add" textAlignment="CENTER"> + <Button fx:id="addBtn" alignment="TOP_CENTER" mnemonicParsing="false" onAction="#handleAddButton" text="Add" textAlignment="CENTER"> <graphic> <ImageView fitHeight="19.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true"> <image> @@ -81,7 +81,7 @@ </image> </ImageView> </graphic></Button> - <Button fx:id="edit" alignment="TOP_CENTER" mnemonicParsing="false" onAction="#handleEditButton" text="Edit" textAlignment="CENTER"> + <Button fx:id="editBtn" alignment="TOP_CENTER" mnemonicParsing="false" onAction="#handleEditButton" text="Edit" textAlignment="CENTER"> <graphic> <ImageView fitHeight="19.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true"> <image> @@ -89,7 +89,7 @@ </image> </ImageView> </graphic></Button> - <Button alignment="TOP_CENTER" mnemonicParsing="false" text="Delete" textAlignment="CENTER"> + <Button fx:id="deleteBtn" alignment="TOP_CENTER" mnemonicParsing="false" onAction="#handleDeleteBtn" text="Delete" textAlignment="CENTER"> <graphic> <ImageView fitHeight="19.0" fitWidth="16.0" pickOnBounds="true" preserveRatio="true"> <image> -- GitLab