From a1a76652abe306a880647d9718900f46741bc365 Mon Sep 17 00:00:00 2001 From: Harry Linrui XU <xulr0820@hotmail.com> Date: Sun, 26 Mar 2023 12:42:52 +0200 Subject: [PATCH] "Implemented a sum field for all tableviews" --- .../demo/controller/BudgetController.java | 15 ++++------ .../demo/controller/ExpensesController.java | 29 +++++++++---------- .../demo/controller/IncomeController.java | 13 ++++++--- .../demo/controller/MainMenuController.java | 11 ++++--- src/main/resources/Economics/Expense.register | 5 ++++ src/main/resources/view/BudgetNew.fxml | 23 +++++++++++++-- src/main/resources/view/Expenses.fxml | 24 ++++++++++++++- src/main/resources/view/Income.fxml | 21 +++++++++++++- src/main/resources/view/MainMenu.fxml | 10 +++++-- 9 files changed, 112 insertions(+), 39 deletions(-) diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java index b2be85cb..76955931 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/BudgetController.java @@ -11,6 +11,7 @@ import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; import javafx.stage.Modality; import javafx.stage.Stage; import no.ntnu.idatt1002.demo.data.Budget.BudgetItem; @@ -29,7 +30,6 @@ import no.ntnu.idatt1002.demo.data.Economics.IncomeRegister; public class BudgetController { - private DialogMode dialogMode; private GeneralBudget general; @FXML @@ -59,20 +59,14 @@ public class BudgetController { @FXML private TableColumn<BudgetItem, ExpenseCategory> categoryColumn; - @FXML - private TextArea daysVariable; - @FXML private TableColumn<BudgetItem, String> descriptionColumn; @FXML - private TextArea monthVariable; + private Text sum; @FXML - private TableColumn<?, ?> percentageColumn; - - @FXML - private TextArea totalBudgetAmount; + private TableColumn<BudgetItem, Double> percentageColumn; @FXML private ObservableList<BudgetItem> budgetList; @@ -87,6 +81,8 @@ public class BudgetController { general = loadIncomeDataFromFile("Budget"); budgetList = FXCollections.observableArrayList(general.getBudgetItems()); budgetTableView.setItems(budgetList); + + sum.setText(String.valueOf(general.totalSum())); } @FXML public void switchAddBudget(javafx.event.ActionEvent event) throws IOException { @@ -104,6 +100,7 @@ public class BudgetController { AddBudgetController budgetController = loader.getController(); + DialogMode dialogMode; if(event.getSource().equals(addBudget)){ dialogMode = DialogMode.ADD; dialogTitle = "New Budget"; 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 feb0ab94..4ef9cc43 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/ExpensesController.java @@ -20,6 +20,7 @@ import javafx.scene.control.Dialog; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; import javafx.stage.Modality; import javafx.stage.Stage; import no.ntnu.idatt1002.demo.data.Economics.Expense; @@ -37,10 +38,6 @@ enum DialogMode { public class ExpensesController { - /** - * The mode of the dialog. NEW if new contact, EDIT if edit existing contact. - */ - private DialogMode dialogMode; @FXML private Button addBtn; @FXML @@ -56,13 +53,15 @@ public class ExpensesController { private Button incomeBtn; @FXML - private Button overviewBtn; + private Text sum; @FXML private Button budgetBtn; @FXML private Button returnBtn; + + @FXML private TableColumn<Expense, Double> amountColumn; @@ -82,31 +81,29 @@ public class ExpensesController { private TableView<Expense> expenseTableView; @FXML - private TableView<Income> incomeTableView; - ExpenseRegister expenseRegister; ObservableList<Expense> expenses; ObservableList<String> filter; @FXML - public void initialize() - throws IOException { //TODO SAME REGISTER FOR BOTH, BUT LOAD DIFFERENT DATA DEPENDING ON WHICH IT IS + public void initialize() throws IOException { dateColumn.setCellValueFactory(new PropertyValueFactory<Expense, String>("date")); amountColumn.setCellValueFactory(new PropertyValueFactory<Expense, Double>("amount")); - categoryColumn.setCellValueFactory( - new PropertyValueFactory<Expense, ExpenseCategory>("category")); + categoryColumn.setCellValueFactory(new PropertyValueFactory<Expense, ExpenseCategory>("category")); descriptionColumn.setCellValueFactory(new PropertyValueFactory<Expense, String>("description")); recurringColumn.setCellValueFactory(new PropertyValueFactory<Expense, Boolean>("recurring")); filter = FXCollections.observableArrayList("All", "Food", "Clothes", "Books", "Other", "Fixed expense"); + show.setItems(filter); + show.setValue("All"); + expenseRegister = loadExpenseDataFromFile("Expense"); expenses = FXCollections.observableArrayList(expenseRegister.getItems()); expenseTableView.setItems(expenses); - show.setItems(filter); - show.setValue("All"); + sum.setText(String.valueOf(expenseRegister.getTotalSum())); } @FXML @@ -134,6 +131,10 @@ public class ExpensesController { // Get the controller for the loaded FXML file AddExpenseController dialogController = loader.getController(); + /** + * The mode of the dialog. NEW if new contact, EDIT if edit existing contact. + */ + DialogMode dialogMode; if (event.getSource().equals(addBtn)) { dialogMode = DialogMode.ADD; dialogTitle = "Add expense"; @@ -214,8 +215,6 @@ public class ExpensesController { FXMLLoader loader = new FXMLLoader(); if (event.getSource() == incomeBtn) { loader.setLocation(SceneController.class.getResource("/view/Income.fxml")); - } else if (event.getSource() == overviewBtn) { - loader.setLocation(SceneController.class.getResource("/view/Overview.fxml")); } else if (event.getSource() == returnBtn) { loader.setLocation(SceneController.class.getResource("/view/FirstMenu.fxml")); } else if (event.getSource() == budgetBtn) { diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java index 457da80f..fea1cb48 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/IncomeController.java @@ -20,6 +20,7 @@ import javafx.scene.control.Dialog; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.text.Text; import javafx.stage.Modality; import javafx.stage.Stage; import no.ntnu.idatt1002.demo.data.Economics.Income; @@ -58,6 +59,9 @@ public class IncomeController { private Button budgetBtn; @FXML private Button returnBtn; + + @FXML + private Text sum; @FXML private TableColumn<Income, Double> amountColumn; @@ -82,7 +86,7 @@ public class IncomeController { ObservableList<String> filter; @FXML - public void initialize() throws IOException { //TODO SAME REGISTER FOR BOTH, BUT LOAD DIFFERENT DATA DEPENDING ON WHICH IT IS + public void initialize() throws IOException { dateColumn.setCellValueFactory(new PropertyValueFactory<Income, String>("date")); amountColumn.setCellValueFactory(new PropertyValueFactory<Income, Double>("amount")); categoryColumn.setCellValueFactory(new PropertyValueFactory<Income, IncomeCategory>("category")); @@ -90,13 +94,14 @@ public class IncomeController { recurringColumn.setCellValueFactory(new PropertyValueFactory<Income, Boolean>("recurring")); filter = FXCollections.observableArrayList("All", "Gift", "Salary", "Student loan", "Fixed income"); + show.setItems(filter); + show.setValue("All"); + incomeRegister = loadIncomeDataFromFile("Income"); income = FXCollections.observableArrayList(incomeRegister.getItems()); incomeTableView.setItems(income); - show.setItems(filter); - show.setValue("All"); - + sum.setText(String.valueOf(incomeRegister.getTotalSum())); //if budget.register isEmpty -> disable expense } diff --git a/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java b/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java index eadb9b4b..f59aedc7 100644 --- a/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java +++ b/src/main/java/no/ntnu/idatt1002/demo/controller/MainMenuController.java @@ -48,6 +48,7 @@ public class MainMenuController { @FXML private Label balanceLbl; + @FXML public void initialize() throws IOException { IncomeController incomeController = new IncomeController(); @@ -56,16 +57,18 @@ public class MainMenuController { ExpensesController expensesController = new ExpensesController(); ExpenseRegister expenseRegister = expensesController.loadExpenseDataFromFile("Expense"); - System.out.println(expenseRegister.getTotalSum() + ", " + incomeRegister.getTotalSum()); + double incomeSum = incomeRegister.getTotalSum(); + double expenseSum = expenseRegister.getTotalSum(); - progressbar.setProgress(expenseRegister.getTotalSum()/incomeRegister.getTotalSum()); + progressbar.setProgress(expenseSum/incomeSum); progressMarker.setTranslateX(-275 + progressbar.getProgress()); - today.setTranslateX(-275 + progressbar.getProgress()); budgetMonth.setText("BUDGET " + (LocalDate.EPOCH.getMonth())); - double balance = incomeRegister.getTotalSum() - expenseRegister.getTotalSum(); + double balance = incomeSum - expenseSum; balanceLbl.setText("Balance: " + (balance)); + today.setText("Used " + expenseSum + " out of " + incomeSum + " this month"); + if (balance < 0) { balanceLbl.setTextFill(Color.RED); } diff --git a/src/main/resources/Economics/Expense.register b/src/main/resources/Economics/Expense.register index 92c0b798..d05c78c3 100644 --- a/src/main/resources/Economics/Expense.register +++ b/src/main/resources/Economics/Expense.register @@ -10,3 +10,8 @@ amount=121.0 isRecurring=Not recurring category=OTHER +date=2023-03-26 +amount=4000.0 +isRecurring=Not recurring +category=FOOD + diff --git a/src/main/resources/view/BudgetNew.fxml b/src/main/resources/view/BudgetNew.fxml index a6912ef3..9cda09ce 100644 --- a/src/main/resources/view/BudgetNew.fxml +++ b/src/main/resources/view/BudgetNew.fxml @@ -15,7 +15,9 @@ <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.Region?> <?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.StackPane?> <?import javafx.scene.layout.VBox?> +<?import javafx.scene.shape.Rectangle?> <?import javafx.scene.text.Font?> <?import javafx.scene.text.Text?> @@ -69,6 +71,7 @@ <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" /> <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" /> <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0"> @@ -120,7 +123,7 @@ </ComboBox> </children> </VBox> - <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2"> + <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="3"> <children> <Button fx:id="incomeBtn" mnemonicParsing="false" onAction="#switchScene" text="Income" /> <Button fx:id="budgetBtn" disable="true" mnemonicParsing="false" onAction="#switchScene" text="Budget" /> @@ -138,14 +141,30 @@ <TableView fx:id="budgetTableView" prefHeight="260.0" prefWidth="485.0" GridPane.columnSpan="2" GridPane.rowIndex="1"> <columns> <TableColumn fx:id="categoryColumn" prefWidth="75.0" text="Category/Title" /> - <TableColumn fx:id="percentageColumn" prefWidth="75.0" text="Percentage" /> <TableColumn fx:id="amountColumn" prefWidth="75.0" text="Amount" /> + <TableColumn fx:id="percentageColumn" prefWidth="75.0" text="Percentage" /> <TableColumn fx:id="descriptionColumn" prefWidth="75.0" text="Description" /> </columns> <columnResizePolicy> <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> </columnResizePolicy> </TableView> + <StackPane GridPane.rowIndex="2"> + <children> + <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#f8f8f8" height="18.0" stroke="#d9cccc" strokeType="INSIDE" width="209.0" StackPane.alignment="CENTER_LEFT" /> + <HBox prefHeight="18.0" prefWidth="517.0"> + <children> + <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Sum: "> + <HBox.margin> + <Insets left="2.0" /> + </HBox.margin> + </Text> + <Region prefHeight="18.0" prefWidth="101.0" /> + <Text fx:id="sum" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" /> + </children> + </HBox> + </children> + </StackPane> </children> </GridPane> </center> diff --git a/src/main/resources/view/Expenses.fxml b/src/main/resources/view/Expenses.fxml index 31669e18..0311ce16 100644 --- a/src/main/resources/view/Expenses.fxml +++ b/src/main/resources/view/Expenses.fxml @@ -15,7 +15,9 @@ <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.Region?> <?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.StackPane?> <?import javafx.scene.layout.VBox?> +<?import javafx.scene.shape.Rectangle?> <?import javafx.scene.text.Font?> <?import javafx.scene.text.Text?> @@ -69,6 +71,7 @@ <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" /> <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" /> <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0"> @@ -117,7 +120,7 @@ </ComboBox> </children> </VBox> - <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2"> + <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="3"> <children> <Button fx:id="incomeBtn" mnemonicParsing="false" onAction="#switchScene" text="Income" /> <Button fx:id="budgetBtn" mnemonicParsing="false" onAction="#switchScene" text="Budget" /> @@ -130,6 +133,9 @@ <padding> <Insets top="10.0" /> </padding> + <GridPane.margin> + <Insets top="5.0" /> + </GridPane.margin> </HBox> <TableView fx:id="expenseTableView" prefHeight="260.0" prefWidth="485.0" GridPane.columnSpan="2" GridPane.rowIndex="1"> <columns> @@ -143,6 +149,22 @@ <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> </columnResizePolicy> </TableView> + <StackPane GridPane.rowIndex="2"> + <children> + <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#f8f8f8" height="18.0" stroke="#d9cccc" strokeType="INSIDE" width="209.0" StackPane.alignment="CENTER_LEFT" /> + <HBox prefHeight="18.0" prefWidth="517.0"> + <children> + <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Sum: "> + <HBox.margin> + <Insets left="2.0" /> + </HBox.margin> + </Text> + <Region prefHeight="18.0" prefWidth="74.0" /> + <Text fx:id="sum" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" /> + </children> + </HBox> + </children> + </StackPane> </children> </GridPane> </center> diff --git a/src/main/resources/view/Income.fxml b/src/main/resources/view/Income.fxml index 3414dfcc..f9f1e586 100644 --- a/src/main/resources/view/Income.fxml +++ b/src/main/resources/view/Income.fxml @@ -15,7 +15,9 @@ <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.Region?> <?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.StackPane?> <?import javafx.scene.layout.VBox?> +<?import javafx.scene.shape.Rectangle?> <?import javafx.scene.text.Font?> <?import javafx.scene.text.Text?> @@ -69,6 +71,7 @@ <RowConstraints maxHeight="65.33334064483643" minHeight="10.0" prefHeight="65.33334064483643" vgrow="SOMETIMES" /> <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="214.00004069010413" vgrow="SOMETIMES" /> <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="29.999959309895814" vgrow="SOMETIMES" /> + <RowConstraints maxHeight="298.66665744781494" minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> <HBox alignment="BOTTOM_LEFT" prefWidth="410.0" spacing="5.0"> @@ -120,7 +123,7 @@ </ComboBox> </children> </VBox> - <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="2"> + <HBox prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="2" GridPane.rowIndex="3"> <children> <Button disable="true" mnemonicParsing="false" text="Income" /> <Button fx:id="budgetBtn" mnemonicParsing="false" onAction="#switchScene" text="Budget" /> @@ -147,6 +150,22 @@ <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> </columnResizePolicy> </TableView> + <StackPane GridPane.rowIndex="2"> + <children> + <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#f8f8f8" height="18.0" stroke="#d9cccc" strokeType="INSIDE" width="209.0" StackPane.alignment="CENTER_LEFT" /> + <HBox prefHeight="18.0" prefWidth="517.0"> + <children> + <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Sum: "> + <HBox.margin> + <Insets left="2.0" /> + </HBox.margin> + </Text> + <Region prefHeight="18.0" prefWidth="74.0" /> + <Text fx:id="sum" strokeType="OUTSIDE" strokeWidth="0.0" text="Text" /> + </children> + </HBox> + </children> + </StackPane> </children> </GridPane> </center> diff --git a/src/main/resources/view/MainMenu.fxml b/src/main/resources/view/MainMenu.fxml index 57af8262..5bc13db1 100644 --- a/src/main/resources/view/MainMenu.fxml +++ b/src/main/resources/view/MainMenu.fxml @@ -46,14 +46,18 @@ <VBox alignment="BOTTOM_RIGHT" GridPane.columnSpan="2"> <children> <DatePicker fx:id="date" /> - <HBox alignment="BOTTOM_CENTER" prefHeight="28.0" prefWidth="574.0"> + <VBox alignment="BOTTOM_CENTER" prefHeight="67.0" prefWidth="574.0"> <children> <Label fx:id="balanceLbl" text="Balance:" textAlignment="CENTER"> <font> <Font name="System Bold" size="24.0" /> - </font></Label> + </font> + </Label> </children> - </HBox> + <padding> + <Insets bottom="-20.0" /> + </padding> + </VBox> </children> </VBox> <StackPane GridPane.columnSpan="2" GridPane.rowIndex="1"> -- GitLab