From 41f1125a3f68d66518d4a7a8f1985227c831c393 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 19 May 2026 14:11:24 +0200 Subject: [PATCH] Fix: Fixed visual bug regarding precision error when calculating owned shares --- .../widgets/dashboard/DashBoardController.java | 12 ++++++++++-- .../view/widgets/dashboard/DashBoardView.java | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java index d6334f0..64280dc 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardController.java @@ -129,7 +129,8 @@ protected void initInteractions() { getViewElement().setCurrentStock(stockList.getFirst(), 0); getViewElement().updateGraph(selectedTimeRange); getViewElement().setOnAction(DashBoardActions.BUY_SHARES, () -> { - if (Validator.NOT_EMPTY.isValid(getViewElement().getQuantityInputField().getText())) { + if (Validator.NOT_EMPTY.isValid(getViewElement().getQuantityInputField().getText()) + && Float.parseFloat(getViewElement().getQuantityInputField().getText()) > 0) { BigDecimal amountToBuy = new BigDecimal(getViewElement().getQuantityInputField().getText()); Transaction purchase = exchange.buy( getViewElement().getCurrentStock().getSymbol(), @@ -143,7 +144,8 @@ protected void initInteractions() { }); getViewElement().setOnAction(DashBoardActions.SELL_SHARES, () -> { - if (Validator.NOT_EMPTY.isValid(getViewElement().getQuantityInputField().getText())) { + if (Validator.NOT_EMPTY.isValid(getViewElement().getQuantityInputField().getText()) + && Float.parseFloat(getViewElement().getQuantityInputField().getText()) > 0) { List transactions = exchange.sell( new BigDecimal(getViewElement().getQuantityInputField().getText()), getViewElement().getCurrentStock().getSymbol(), @@ -190,6 +192,12 @@ protected void initInteractions() { return null; })); + getViewElement().getQuantityInputField().focusedProperty().addListener((observable, wasFocused, isNowFocused) -> { + if (!isNowFocused && getViewElement().getQuantityInputField().getText().trim().isEmpty()) { + getViewElement().getQuantityInputField().setText("1.0"); + } + }); + getViewElement().getSideBarSearchField().textProperty().addListener((observable, o, n) -> { selectedFilter = n; populateStockList(selectedFilter); diff --git a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java index c1d53a6..5c2a711 100644 --- a/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java +++ b/src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/view/widgets/dashboard/DashBoardView.java @@ -382,7 +382,7 @@ public void setCurrentStock(final Stock stock, final float amountOwned) { selectedStockLabel.setText(stock.getSymbol()); stockFullNameLabel.setText(stock.getCompany()); ownedStocks = amountOwned; - ownedQuantityLabel.setText("Owned: " + ownedStocks); + ownedQuantityLabel.setText("Owned: " + formatShares(ownedStocks)); } /** @@ -392,7 +392,7 @@ public void setCurrentStock(final Stock stock, final float amountOwned) { * */ public void addOwnedShares(final float val) { ownedStocks += val; - ownedQuantityLabel.setText("Owned: " + ownedStocks); + ownedQuantityLabel.setText("Owned: " + formatShares(ownedStocks)); } /** @@ -553,4 +553,14 @@ public TextField getQuantityInputField() { public ComboBox getTimeRangeSelector() { return timeRangeSelector; } + + /** + * Helper method for formatting owned shares (avoid precision showing in UI). + * + * @param amount the amount of shares to show. + * */ + private String formatShares(final float amount) { + String formatted = String.format(java.util.Locale.US, "%.3f", amount); + return formatted.replaceAll("0+$", "").replaceAll("\\.$", ""); + } }