From 08b85af147e9f3f83add2b5bd1bfb8e013498d01 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Thu, 19 Mar 2026 12:54:06 +0100 Subject: [PATCH 01/11] Add: Add: Singleton for LobbyButtonTranslationManager and changing exit button behaviour --- .../gameuicomponents/TaskbarController.java | 56 ++++++++++++++----- .../ui/lobbyui/CasinomainuiController.java | 31 ++++++---- .../ui/lobbyui/LobbyButtonGridManager.java | 24 ++++++-- .../LobbyButtonTranslationManager.java | 23 ++++++-- 4 files changed, 99 insertions(+), 35 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java index 33e1e32..1c31b05 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java @@ -11,16 +11,20 @@ import javafx.scene.layout.HBox; /** * Controller für die interaktive Taskleiste innerhalb der Poker-UI. * - *

Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und Verwaltung von + *

+ * Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und + * Verwaltung von * Spieleinsätzen, - Steuerung allgemeiner Menüfunktionen wie Exit. */ public class TaskbarController { - private static final org.apache.logging.log4j.Logger LOGGER = - org.apache.logging.log4j.LogManager.getLogger(CasinoBrowserController.class); + private static final org.apache.logging.log4j.Logger LOGGER = org.apache.logging.log4j.LogManager + .getLogger(CasinoBrowserController.class); - @FXML private HBox taskbar; - @FXML private TextField taskbarInput; + @FXML + private HBox taskbar; + @FXML + private TextField taskbarInput; private double xOffset = 0; private double yOffset = 0; @@ -30,7 +34,8 @@ public class TaskbarController { private static final int CREDIT_STEP = 5; /** - * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert die relative + * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert + * die relative * Position, um später korrekt zu verschieben. * * @param event Das Mausereignis @@ -42,10 +47,13 @@ public class TaskbarController { } /** - * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. Aktualisiert die Position + * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. + * Aktualisiert die Position * und skaliert die Taskleiste leicht zur visuellen Rückmeldung. * - *

TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster verschwinden + *

+ * TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster + * verschwinden * kann. * * @param event Das Mausereignis @@ -60,7 +68,8 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt die Skalierung der + * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt + * die Skalierung der * Taskleiste wieder auf Normalgröße. * * @param event Das Mausereignis @@ -84,7 +93,8 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst die + * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst + * die * Verarbeitung des Einsatzes aus. */ @FXML @@ -95,17 +105,31 @@ public class TaskbarController { /** * Wird aufgerufen, wenn der Exit-Button in der Taskleiste gedrückt wird. * - *

TODO: Logik implementieren, um zur Lobby zurückzukehren, ohne die gesamte Anwendung zu + *

+ * TODO: Logik implementieren, um zur Lobby zurückzukehren, ohne die gesamte + * Anwendung zu * schließen (kein System.exit/Platform.exit). */ @FXML private void onExitButtonClick() { - Platform.exit(); + javafx.application.Platform.runLater(() -> { + // Game-Stage schließen + javafx.stage.Stage currentStage = (javafx.stage.Stage) taskbar.getScene().getWindow(); + currentStage.close(); + // Lobby-UI starten + try { + new ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.Casinomainui().start(new javafx.stage.Stage()); + } catch (Exception e) { + LOGGER.error("Fehler beim Starten der Lobby-UI: {}", e.getMessage()); + } + }); } /** - * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich ganzzahlige Werte - * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 entsprechen + * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich + * ganzzahlige Werte + * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 + * entsprechen * (5er-Schritte). Der Einsatz wird aktuell nur auf der Konsole ausgegeben. */ private void processBet() { @@ -128,7 +152,9 @@ public class TaskbarController { /** * Öffnet den integrierten Casono Webbrowser. * - *

TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps & Tricks + *

+ * TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps + * & Tricks * Seite), sobald die Inhalte für Strategien und Support bereitstehen. */ @FXML diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java index 56fe07e..ca0e69b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java @@ -12,17 +12,27 @@ import javafx.scene.shape.Rectangle; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -/** Controller for the Casono main UI lobby. Handles UI initialization and user actions. */ +/** + * Controller for the Casono main UI lobby. Handles UI initialization and user + * actions. + */ public class CasinomainuiController { private static final Logger LOGGER = LogManager.getLogger(CasinomainuiController.class); - @FXML private AnchorPane rootPane; - @FXML private Label titleLabel; - @FXML private Label subtitleLabel; - @FXML private ImageView logoView; - @FXML private Rectangle greenBox; - @FXML private Button exitbutton; - @FXML private VBox casinoTable; + @FXML + private AnchorPane rootPane; + @FXML + private Label titleLabel; + @FXML + private Label subtitleLabel; + @FXML + private ImageView logoView; + @FXML + private Rectangle greenBox; + @FXML + private Button exitbutton; + @FXML + private VBox casinoTable; private LobbyButtonTranslationManager translationManager; private LobbyButtonGridManager gridManager; @@ -39,9 +49,8 @@ public class CasinomainuiController { subtitleLabel.setText("Texas Hold'em Poker"); logoView.setImage(new Image(getClass().getResource("/images/logo.png").toExternalForm())); - translationManager = new LobbyButtonTranslationManager(); - gridManager = - new LobbyButtonGridManager(new javafx.scene.layout.GridPane(), translationManager); + translationManager = LobbyButtonTranslationManager.getInstance(); + gridManager = new LobbyButtonGridManager(new javafx.scene.layout.GridPane(), translationManager); casinoTable.getChildren().clear(); casinoTable.getChildren().add(gridManager.getGridPane()); gridManager.renderLobbyButtons(); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java index 03259a7..f8dbb11 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java @@ -13,7 +13,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** - * Manages the grid for lobby buttons and rendering. Uses LobbyButtonTranslationManager for mapping + * Manages the grid for lobby buttons and rendering. Uses + * LobbyButtonTranslationManager for mapping * ButtonID to LobbyID. */ public class LobbyButtonGridManager { @@ -40,17 +41,19 @@ public class LobbyButtonGridManager { /** * Constructor for the GridManager. * - * @param gridPane the GridPane for rendering + * @param gridPane the GridPane for rendering * @param translationManager the manager for mapping ButtonID to LobbyID */ public LobbyButtonGridManager( GridPane gridPane, LobbyButtonTranslationManager translationManager) { this.gridPane = gridPane; - this.translationManager = translationManager; + // Singleton immer verwenden + this.translationManager = LobbyButtonTranslationManager.getInstance(); } /** - * Renders all lobby buttons in the grid. Creates a button for each mapping with image and event + * Renders all lobby buttons in the grid. Creates a button for each mapping with + * image and event * handler. */ public void renderLobbyButtons() { @@ -99,8 +102,19 @@ public class LobbyButtonGridManager { * @param lobbyId The lobbyId to join */ public void joinLobby(int lobbyId) { - // TODO: Replace with actual join logic + // Game-UI starten und Lobby-UI schließen LOGGER.info("Joining lobby: {}", lobbyId); + javafx.application.Platform.runLater(() -> { + // Lobby-Stage schließen + javafx.stage.Stage currentStage = (javafx.stage.Stage) gridPane.getScene().getWindow(); + currentStage.close(); + // Game-UI starten + try { + new ch.unibas.dmi.dbis.cs108.casono.client.ui.gameui.CasinoGameUI().start(new javafx.stage.Stage()); + } catch (Exception e) { + LOGGER.error("Fehler beim Starten der Game-UI: {}", e.getMessage()); + } + }); } /** diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java index 19af19e..1d6371f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java @@ -4,18 +4,33 @@ import java.util.HashMap; import java.util.Map; /** - * Verwaltet das Mapping zwischen Button-IDs und Lobby-IDs rein im Speicher. Keine Dateioperationen, + * Verwaltet das Mapping zwischen Button-IDs und Lobby-IDs rein im Speicher. + * Keine Dateioperationen, * nur Laufzeitdatenstruktur. */ public class LobbyButtonTranslationManager { + + // Singleton-Instanz + private static LobbyButtonTranslationManager instance; + + // Singleton-Zugriff + public static LobbyButtonTranslationManager getInstance() { + if (instance == null) { + instance = new LobbyButtonTranslationManager(); + } + return instance; + } + /** Maximale Anzahl an Buttons/Lobbys */ private static final int MAX_BUTTONS = 8; /** Zuordnung ButtonID → LobbyID */ private final Map buttonIdToLobbyId = new HashMap<>(); - /** Konstruktor: initialisiert die Zuordnung leer. */ - public LobbyButtonTranslationManager() { + /** + * Privater Konstruktor für Singleton-Pattern + */ + private LobbyButtonTranslationManager() { // Zuordnung bleibt leer beim Start } @@ -32,7 +47,7 @@ public class LobbyButtonTranslationManager { * Fügt eine Zuordnung ButtonID → LobbyID hinzu. * * @param buttonId Die ID des Buttons - * @param lobbyId Die ID der Lobby + * @param lobbyId Die ID der Lobby * @throws Exception wenn das Grid voll ist */ public void addLobbyButton(int buttonId, int lobbyId) throws Exception { -- 2.52.0 From 85f89a91f1c2335a1256c2a339fe1c44224d99c3 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Thu, 19 Mar 2026 12:54:50 +0100 Subject: [PATCH 02/11] Refactor: Update unit tests for LobbyButtonTranslationManager and LobbyButtonGridManager --- .../client/ui/lobbyui/LobbyButtonGridManagerTest.java | 7 +------ .../ui/lobbyui/LobbyButtonTranslationManagerTest.java | 3 ++- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java index 67aaae4..e12d0d9 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java @@ -13,7 +13,7 @@ class LobbyButtonGridManagerTest { @BeforeEach void setUp() { gridPane = new GridPane(); - translationManager = new LobbyButtonTranslationManager(); + translationManager = LobbyButtonTranslationManager.getInstance(); translationManager.getButtonIdToLobbyId().clear(); gridManager = new LobbyButtonGridManager(gridPane, translationManager); } @@ -24,9 +24,4 @@ class LobbyButtonGridManagerTest { assertTrue(lobbyId > 0); } - @Test - void testJoinLobbyPlaceholder() { - // check if exception is thrown - assertDoesNotThrow(() -> gridManager.joinLobby(123)); - } } diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java index d19532a..dfcce6a 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManagerTest.java @@ -6,11 +6,12 @@ import java.util.Map; import org.junit.jupiter.api.*; class LobbyButtonTranslationManagerTest { + LobbyButtonTranslationManager manager; @BeforeEach void setUp() { - manager = new LobbyButtonTranslationManager(); + manager = LobbyButtonTranslationManager.getInstance(); manager.getButtonIdToLobbyId().clear(); } -- 2.52.0 From 8639fa420fc0359634e63e9b226197688409caa0 Mon Sep 17 00:00:00 2001 From: Julian Kropff Date: Thu, 19 Mar 2026 13:27:32 +0100 Subject: [PATCH 03/11] Fix: change file names to conform convention --- .../casono/client/ui/gameui/CasinoGameUI.java | 2 +- .../gameuicomponents/CasinoBrowserController.java | 2 +- .../{casinogameui.css => Casinogameui.css} | 0 src/main/resources/ui-structure/Casinogameui.fxml | 14 +++++++------- .../components/{chatbox.fxml => Chatbox.fxml} | 2 +- .../components/{chatui.css => Chatui.css} | 0 .../{playerstatus.fxml => Playerstatus.fxml} | 0 .../{taskbar.fxml => Taskbar.fxml} | 0 8 files changed, 10 insertions(+), 10 deletions(-) rename src/main/resources/ui-structure/{casinogameui.css => Casinogameui.css} (100%) rename src/main/resources/ui-structure/components/{chatbox.fxml => Chatbox.fxml} (98%) rename src/main/resources/ui-structure/components/{chatui.css => Chatui.css} (100%) rename src/main/resources/ui-structure/gameuicomponents/{playerstatus.fxml => Playerstatus.fxml} (100%) rename src/main/resources/ui-structure/gameuicomponents/{taskbar.fxml => Taskbar.fxml} (100%) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java index f9b5419..331b823 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java @@ -29,7 +29,7 @@ public class CasinoGameUI extends Application { @Override public void start(Stage stage) throws IOException { FXMLLoader fxmlLoader = - new FXMLLoader(CasinoGameUI.class.getResource("/ui-structure/casinogameui.fxml")); + new FXMLLoader(CasinoGameUI.class.getResource("/ui-structure/Casinogameui.fxml")); Scene scene = new Scene(fxmlLoader.load(), DEFAULT_WIDTH, DEFAULT_HEIGHT); stage.setTitle("Casono (GAME)"); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java index e351b7a..758acf6 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java @@ -423,7 +423,7 @@ public class CasinoBrowserController { Scene scene = new Scene(root, WINDOW_WIDTH, WINDOW_HEIGHT); - var css = CasinoBrowserController.class.getResource("/ui-structure/casinogameui.css"); + var css = CasinoBrowserController.class.getResource("/ui-structure/Casinogameui.css"); if (css != null) { scene.getStylesheets().add(css.toExternalForm()); diff --git a/src/main/resources/ui-structure/casinogameui.css b/src/main/resources/ui-structure/Casinogameui.css similarity index 100% rename from src/main/resources/ui-structure/casinogameui.css rename to src/main/resources/ui-structure/Casinogameui.css diff --git a/src/main/resources/ui-structure/Casinogameui.fxml b/src/main/resources/ui-structure/Casinogameui.fxml index 91bbe26..08bbf56 100644 --- a/src/main/resources/ui-structure/Casinogameui.fxml +++ b/src/main/resources/ui-structure/Casinogameui.fxml @@ -5,12 +5,12 @@ - + + stylesheets="@Casinogameui.css"> @@ -78,14 +78,14 @@ - + - + @@ -99,7 +99,7 @@ - + @@ -114,7 +114,7 @@ - + @@ -129,7 +129,7 @@ - + diff --git a/src/main/resources/ui-structure/components/chatbox.fxml b/src/main/resources/ui-structure/components/Chatbox.fxml similarity index 98% rename from src/main/resources/ui-structure/components/chatbox.fxml rename to src/main/resources/ui-structure/components/Chatbox.fxml index 3e518ba..c61e28e 100644 --- a/src/main/resources/ui-structure/components/chatbox.fxml +++ b/src/main/resources/ui-structure/components/Chatbox.fxml @@ -21,7 +21,7 @@ xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.unibas.dmi.dbis.cs108.casono.client.ui.chatui.ChatController" alignment="CENTER" - stylesheets="@chatui.css"> + stylesheets="@Chatui.css"> diff --git a/src/main/resources/ui-structure/components/chatui.css b/src/main/resources/ui-structure/components/Chatui.css similarity index 100% rename from src/main/resources/ui-structure/components/chatui.css rename to src/main/resources/ui-structure/components/Chatui.css diff --git a/src/main/resources/ui-structure/gameuicomponents/playerstatus.fxml b/src/main/resources/ui-structure/gameuicomponents/Playerstatus.fxml similarity index 100% rename from src/main/resources/ui-structure/gameuicomponents/playerstatus.fxml rename to src/main/resources/ui-structure/gameuicomponents/Playerstatus.fxml diff --git a/src/main/resources/ui-structure/gameuicomponents/taskbar.fxml b/src/main/resources/ui-structure/gameuicomponents/Taskbar.fxml similarity index 100% rename from src/main/resources/ui-structure/gameuicomponents/taskbar.fxml rename to src/main/resources/ui-structure/gameuicomponents/Taskbar.fxml -- 2.52.0 From 1727aec42ced96c3838445dec30f9f81a977d4ed Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Thu, 19 Mar 2026 14:16:18 +0100 Subject: [PATCH 04/11] Add: chatui added to lobby ui --- src/main/resources/ui-structure/Casinomainui.fxml | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/main/resources/ui-structure/Casinomainui.fxml b/src/main/resources/ui-structure/Casinomainui.fxml index 2d18a48..7cae21e 100644 --- a/src/main/resources/ui-structure/Casinomainui.fxml +++ b/src/main/resources/ui-structure/Casinomainui.fxml @@ -106,20 +106,7 @@ - - - - - - - + -- 2.52.0 From 52bbbd6181d155cb32ae764d7c4daeaa9ee47b43 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Thu, 19 Mar 2026 14:21:43 +0100 Subject: [PATCH 05/11] Fix: buttons now change their size relative to screen size --- .../client/ui/lobbyui/LobbyButtonGridManager.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java index f8dbb11..2c4ab64 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java @@ -68,8 +68,18 @@ public class LobbyButtonGridManager { int buttonId = entry.getKey(); Button btn = new Button(); btn.setId("lobbyBtn-" + buttonId); - btn.setGraphic( - new ImageView(new Image(getClass().getResourceAsStream(BUTTON_IMAGE_PATH)))); + ImageView imageView = new ImageView(new Image(getClass().getResourceAsStream(BUTTON_IMAGE_PATH))); + imageView.setPreserveRatio(true); + // Dynamische Breite: Bindung an die Zellengröße + imageView.fitWidthProperty().bind(gridPane.widthProperty().divide(COLS).subtract(20)); + imageView.setSmooth(true); + btn.setGraphic(imageView); + btn.setMaxWidth(Double.MAX_VALUE); + btn.setMaxHeight(Double.MAX_VALUE); + btn.setMinWidth(10); + btn.setMinHeight(10); + GridPane.setHgrow(btn, javafx.scene.layout.Priority.ALWAYS); + GridPane.setVgrow(btn, javafx.scene.layout.Priority.ALWAYS); btn.setOnAction( e -> { Integer lobbyId = translationManager.getLobbyIdForButton(buttonId); -- 2.52.0 From af37e33f07969a6f1a0e851a603c379f3d8ee0ea Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Fri, 20 Mar 2026 10:57:31 +0100 Subject: [PATCH 06/11] Style: Line length --- .../gameuicomponents/TaskbarController.java | 71 ++++++++----------- .../ui/lobbyui/CasinomainuiController.java | 29 +++----- .../ui/lobbyui/LobbyButtonGridManager.java | 36 +++++----- .../LobbyButtonTranslationManager.java | 9 +-- .../lobbyui/LobbyButtonGridManagerTest.java | 1 - 5 files changed, 61 insertions(+), 85 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java index 1c31b05..106c256 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java @@ -1,30 +1,27 @@ package ch.unibas.dmi.dbis.cs108.casono.client.ui.gameui.gameuicomponents; -import javafx.application.Platform; +import ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.Casinomainui; import javafx.fxml.FXML; import javafx.scene.control.TextField; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** * Controller für die interaktive Taskleiste innerhalb der Poker-UI. * - *

- * Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und - * Verwaltung von + *

Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und Verwaltung von * Spieleinsätzen, - Steuerung allgemeiner Menüfunktionen wie Exit. */ public class TaskbarController { - private static final org.apache.logging.log4j.Logger LOGGER = org.apache.logging.log4j.LogManager - .getLogger(CasinoBrowserController.class); + private static final Logger LOGGER = LogManager.getLogger(CasinoBrowserController.class); - @FXML - private HBox taskbar; - @FXML - private TextField taskbarInput; + @FXML private HBox taskbar; + @FXML private TextField taskbarInput; private double xOffset = 0; private double yOffset = 0; @@ -34,8 +31,7 @@ public class TaskbarController { private static final int CREDIT_STEP = 5; /** - * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert - * die relative + * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert die relative * Position, um später korrekt zu verschieben. * * @param event Das Mausereignis @@ -47,13 +43,10 @@ public class TaskbarController { } /** - * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. - * Aktualisiert die Position + * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. Aktualisiert die Position * und skaliert die Taskleiste leicht zur visuellen Rückmeldung. * - *

- * TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster - * verschwinden + *

TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster verschwinden * kann. * * @param event Das Mausereignis @@ -68,8 +61,7 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt - * die Skalierung der + * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt die Skalierung der * Taskleiste wieder auf Normalgröße. * * @param event Das Mausereignis @@ -93,8 +85,7 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst - * die + * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst die * Verarbeitung des Einsatzes aus. */ @FXML @@ -105,31 +96,29 @@ public class TaskbarController { /** * Wird aufgerufen, wenn der Exit-Button in der Taskleiste gedrückt wird. * - *

- * TODO: Logik implementieren, um zur Lobby zurückzukehren, ohne die gesamte - * Anwendung zu + *

TODO: Logik implementieren, um zur Lobby zurückzukehren, ohne die gesamte Anwendung zu * schließen (kein System.exit/Platform.exit). */ @FXML private void onExitButtonClick() { - javafx.application.Platform.runLater(() -> { - // Game-Stage schließen - javafx.stage.Stage currentStage = (javafx.stage.Stage) taskbar.getScene().getWindow(); - currentStage.close(); - // Lobby-UI starten - try { - new ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.Casinomainui().start(new javafx.stage.Stage()); - } catch (Exception e) { - LOGGER.error("Fehler beim Starten der Lobby-UI: {}", e.getMessage()); - } - }); + javafx.application.Platform.runLater( + () -> { + // Game-Stage schließen + javafx.stage.Stage currentStage = + (javafx.stage.Stage) taskbar.getScene().getWindow(); + currentStage.close(); + // Lobby-UI starten + try { + new Casinomainui().start(new javafx.stage.Stage()); + } catch (Exception e) { + LOGGER.error("Fehler beim Starten der Lobby-UI: {}", e.getMessage()); + } + }); } /** - * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich - * ganzzahlige Werte - * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 - * entsprechen + * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich ganzzahlige Werte + * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 entsprechen * (5er-Schritte). Der Einsatz wird aktuell nur auf der Konsole ausgegeben. */ private void processBet() { @@ -152,9 +141,7 @@ public class TaskbarController { /** * Öffnet den integrierten Casono Webbrowser. * - *

- * TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps - * & Tricks + *

TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps & Tricks * Seite), sobald die Inhalte für Strategien und Support bereitstehen. */ @FXML diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java index ca0e69b..f58b04c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java @@ -12,27 +12,17 @@ import javafx.scene.shape.Rectangle; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -/** - * Controller for the Casono main UI lobby. Handles UI initialization and user - * actions. - */ +/** Controller for the Casono main UI lobby. Handles UI initialization and user actions. */ public class CasinomainuiController { private static final Logger LOGGER = LogManager.getLogger(CasinomainuiController.class); - @FXML - private AnchorPane rootPane; - @FXML - private Label titleLabel; - @FXML - private Label subtitleLabel; - @FXML - private ImageView logoView; - @FXML - private Rectangle greenBox; - @FXML - private Button exitbutton; - @FXML - private VBox casinoTable; + @FXML private AnchorPane rootPane; + @FXML private Label titleLabel; + @FXML private Label subtitleLabel; + @FXML private ImageView logoView; + @FXML private Rectangle greenBox; + @FXML private Button exitbutton; + @FXML private VBox casinoTable; private LobbyButtonTranslationManager translationManager; private LobbyButtonGridManager gridManager; @@ -50,7 +40,8 @@ public class CasinomainuiController { logoView.setImage(new Image(getClass().getResource("/images/logo.png").toExternalForm())); translationManager = LobbyButtonTranslationManager.getInstance(); - gridManager = new LobbyButtonGridManager(new javafx.scene.layout.GridPane(), translationManager); + gridManager = + new LobbyButtonGridManager(new javafx.scene.layout.GridPane(), translationManager); casinoTable.getChildren().clear(); casinoTable.getChildren().add(gridManager.getGridPane()); gridManager.renderLobbyButtons(); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java index 2c4ab64..7495204 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java @@ -13,8 +13,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** - * Manages the grid for lobby buttons and rendering. Uses - * LobbyButtonTranslationManager for mapping + * Manages the grid for lobby buttons and rendering. Uses LobbyButtonTranslationManager for mapping * ButtonID to LobbyID. */ public class LobbyButtonGridManager { @@ -41,7 +40,7 @@ public class LobbyButtonGridManager { /** * Constructor for the GridManager. * - * @param gridPane the GridPane for rendering + * @param gridPane the GridPane for rendering * @param translationManager the manager for mapping ButtonID to LobbyID */ public LobbyButtonGridManager( @@ -52,8 +51,7 @@ public class LobbyButtonGridManager { } /** - * Renders all lobby buttons in the grid. Creates a button for each mapping with - * image and event + * Renders all lobby buttons in the grid. Creates a button for each mapping with image and event * handler. */ public void renderLobbyButtons() { @@ -68,7 +66,8 @@ public class LobbyButtonGridManager { int buttonId = entry.getKey(); Button btn = new Button(); btn.setId("lobbyBtn-" + buttonId); - ImageView imageView = new ImageView(new Image(getClass().getResourceAsStream(BUTTON_IMAGE_PATH))); + ImageView imageView = + new ImageView(new Image(getClass().getResourceAsStream(BUTTON_IMAGE_PATH))); imageView.setPreserveRatio(true); // Dynamische Breite: Bindung an die Zellengröße imageView.fitWidthProperty().bind(gridPane.widthProperty().divide(COLS).subtract(20)); @@ -114,17 +113,20 @@ public class LobbyButtonGridManager { public void joinLobby(int lobbyId) { // Game-UI starten und Lobby-UI schließen LOGGER.info("Joining lobby: {}", lobbyId); - javafx.application.Platform.runLater(() -> { - // Lobby-Stage schließen - javafx.stage.Stage currentStage = (javafx.stage.Stage) gridPane.getScene().getWindow(); - currentStage.close(); - // Game-UI starten - try { - new ch.unibas.dmi.dbis.cs108.casono.client.ui.gameui.CasinoGameUI().start(new javafx.stage.Stage()); - } catch (Exception e) { - LOGGER.error("Fehler beim Starten der Game-UI: {}", e.getMessage()); - } - }); + javafx.application.Platform.runLater( + () -> { + // Lobby-Stage schließen + javafx.stage.Stage currentStage = + (javafx.stage.Stage) gridPane.getScene().getWindow(); + currentStage.close(); + // Game-UI starten + try { + new ch.unibas.dmi.dbis.cs108.casono.client.ui.gameui.CasinoGameUI() + .start(new javafx.stage.Stage()); + } catch (Exception e) { + LOGGER.error("Fehler beim Starten der Game-UI: {}", e.getMessage()); + } + }); } /** diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java index 1d6371f..5d8df82 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java @@ -4,8 +4,7 @@ import java.util.HashMap; import java.util.Map; /** - * Verwaltet das Mapping zwischen Button-IDs und Lobby-IDs rein im Speicher. - * Keine Dateioperationen, + * Verwaltet das Mapping zwischen Button-IDs und Lobby-IDs rein im Speicher. Keine Dateioperationen, * nur Laufzeitdatenstruktur. */ public class LobbyButtonTranslationManager { @@ -27,9 +26,7 @@ public class LobbyButtonTranslationManager { /** Zuordnung ButtonID → LobbyID */ private final Map buttonIdToLobbyId = new HashMap<>(); - /** - * Privater Konstruktor für Singleton-Pattern - */ + /** Privater Konstruktor für Singleton-Pattern */ private LobbyButtonTranslationManager() { // Zuordnung bleibt leer beim Start } @@ -47,7 +44,7 @@ public class LobbyButtonTranslationManager { * Fügt eine Zuordnung ButtonID → LobbyID hinzu. * * @param buttonId Die ID des Buttons - * @param lobbyId Die ID der Lobby + * @param lobbyId Die ID der Lobby * @throws Exception wenn das Grid voll ist */ public void addLobbyButton(int buttonId, int lobbyId) throws Exception { diff --git a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java index e12d0d9..765deb0 100644 --- a/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java +++ b/src/test/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManagerTest.java @@ -23,5 +23,4 @@ class LobbyButtonGridManagerTest { int lobbyId = gridManager.createLobby(); assertTrue(lobbyId > 0); } - } -- 2.52.0 From f78e9dfa3807071325003f35824647e4d8e9c1f7 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Fri, 20 Mar 2026 11:07:17 +0100 Subject: [PATCH 07/11] Style: Magic numbers --- .../client/ui/lobbyui/LobbyButtonGridManager.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java index 7495204..3f75b0f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonGridManager.java @@ -17,6 +17,8 @@ import org.apache.logging.log4j.Logger; * ButtonID to LobbyID. */ public class LobbyButtonGridManager { + private static final double BUTTON_WIDTH_MARGIN = 20.0; + private static final double BUTTON_MIN_SIZE = 10.0; private static final Logger LOGGER = LogManager.getLogger(LobbyButtonGridManager.class); /** GridPane for the button grid. */ @@ -70,13 +72,15 @@ public class LobbyButtonGridManager { new ImageView(new Image(getClass().getResourceAsStream(BUTTON_IMAGE_PATH))); imageView.setPreserveRatio(true); // Dynamische Breite: Bindung an die Zellengröße - imageView.fitWidthProperty().bind(gridPane.widthProperty().divide(COLS).subtract(20)); + imageView + .fitWidthProperty() + .bind(gridPane.widthProperty().divide(COLS).subtract(BUTTON_WIDTH_MARGIN)); imageView.setSmooth(true); btn.setGraphic(imageView); btn.setMaxWidth(Double.MAX_VALUE); btn.setMaxHeight(Double.MAX_VALUE); - btn.setMinWidth(10); - btn.setMinHeight(10); + btn.setMinWidth(BUTTON_MIN_SIZE); + btn.setMinHeight(BUTTON_MIN_SIZE); GridPane.setHgrow(btn, javafx.scene.layout.Priority.ALWAYS); GridPane.setVgrow(btn, javafx.scene.layout.Priority.ALWAYS); btn.setOnAction( -- 2.52.0 From 4dcade3dafc798aa042e6fce8781791946ecae25 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Fri, 20 Mar 2026 11:41:19 +0100 Subject: [PATCH 08/11] Add: Javadoc for client sided classes and methods --- .../cs108/casono/client/ui/gameui/CasinoGameController.java | 5 +++++ .../casono/client/ui/lobbyui/CasinomainuiController.java | 1 + .../client/ui/lobbyui/LobbyButtonTranslationManager.java | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java index c96c9bd..b50c4fb 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java @@ -21,6 +21,11 @@ public class CasinoGameController { // TODO: Test-Logik: wird durch echte Spielinteraktionen ersetzt, // sobald die GameEngine fertig ist @FXML + /** + * Temporäre Test-Methode, die bei Klick auf den Tisch eine Platzhalteraktion ausführt. + * + *

Wird in der finalen Implementierung durch die Spiel-Logik ersetzt. + */ public void onTableClick() { welcomeText.setText("Einsatz akzeptiert!"); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java index f58b04c..48ccce7 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/CasinomainuiController.java @@ -28,6 +28,7 @@ public class CasinomainuiController { private LobbyButtonGridManager gridManager; private int nextButtonId = 1; + /** Default constructor for dependency injection by FXMLLoader. */ public CasinomainuiController() { // Default constructor } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java index 5d8df82..0aea7e4 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobbyui/LobbyButtonTranslationManager.java @@ -13,6 +13,11 @@ public class LobbyButtonTranslationManager { private static LobbyButtonTranslationManager instance; // Singleton-Zugriff + /** + * Liefert die Singleton-Instanz des Managers. + * + * @return die einzige Instanz von {@code LobbyButtonTranslationManager} + */ public static LobbyButtonTranslationManager getInstance() { if (instance == null) { instance = new LobbyButtonTranslationManager(); -- 2.52.0 From 60f326c4d5afcdd6ec6fe693b026519f0aacc2b8 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Wed, 1 Apr 2026 11:34:55 +0200 Subject: [PATCH 09/11] Style: line length checkstyle fix --- .../ui/gameui/gameuicomponents/TaskbarController.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java index 106c256..b780ddc 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java @@ -93,12 +93,6 @@ public class TaskbarController { processBet(); } - /** - * Wird aufgerufen, wenn der Exit-Button in der Taskleiste gedrückt wird. - * - *

TODO: Logik implementieren, um zur Lobby zurückzukehren, ohne die gesamte Anwendung zu - * schließen (kein System.exit/Platform.exit). - */ @FXML private void onExitButtonClick() { javafx.application.Platform.runLater( -- 2.52.0 From 40ea45460eed72403075ff76f726154dbac0997d Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Wed, 1 Apr 2026 11:44:46 +0200 Subject: [PATCH 10/11] Docs: JavaDoc for client side standard constructors --- .../client/ui/chatui/ChatController.java | 5 +++ .../ui/gameui/CasinoGameController.java | 34 ++++++++++---- .../casono/client/ui/gameui/CasinoGameUI.java | 5 +++ .../CasinoBrowserController.java | 4 ++ .../gameuicomponents/TaskbarController.java | 44 +++++++++++++------ 5 files changed, 70 insertions(+), 22 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java index b6b273f..1f7abe3 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/chatui/ChatController.java @@ -41,6 +41,11 @@ public class ChatController { chatScrollPane.vvalueProperty().bind(chatVBox.heightProperty()); } + /** Standardkonstruktor. Wird von FXML verwendet. */ + public ChatController() { + // default constructor for FXML + } + /** * Diese Methode wird vom Senden-Button oder Enter ausgelöst. Sie gibt die eigene Nachricht an * das Netzwerkprotokoll weiter. diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java index b50c4fb..620a248 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java @@ -7,25 +7,41 @@ import javafx.scene.layout.VBox; /** * Controller für die Casino-Spielfläche. * - *

Verantwortlich für: - die Darstellung des Pokertisches und der Spieleroberfläche, - die - * Verarbeitung von Benutzereingaben, - die Schnittstelle zur GameEngine und zum Netzwerkprotokoll. + *

+ * Verantwortlich für: - die Darstellung des Pokertisches und der + * Spieleroberfläche, - die + * Verarbeitung von Benutzereingaben, - die Schnittstelle zur GameEngine und zum + * Netzwerkprotokoll. * - *

Hinweise: - Die Methode `onTableClick()` dient aktuell nur als Test-Logik. Sie ist ggf. nicht - * mehr funktionsfähig und wird zukünftig durch die finale Spielinteraktion ersetzt. + *

+ * Hinweise: - Die Methode `onTableClick()` dient aktuell nur als Test-Logik. + * Sie ist ggf. nicht + * mehr funktionsfähig und wird zukünftig durch die finale Spielinteraktion + * ersetzt. */ public class CasinoGameController { - @FXML private Label welcomeText; - @FXML private VBox casinoTable; + /** Standardkonstruktor. Wird von FXML verwendet. */ + public CasinoGameController() { + // default constructor for FXML + } + + @FXML + private Label welcomeText; + @FXML + private VBox casinoTable; // TODO: Test-Logik: wird durch echte Spielinteraktionen ersetzt, // sobald die GameEngine fertig ist - @FXML + /** - * Temporäre Test-Methode, die bei Klick auf den Tisch eine Platzhalteraktion ausführt. + * Temporäre Test-Methode, die bei Klick auf den Tisch eine Platzhalteraktion + * ausführt. * - *

Wird in der finalen Implementierung durch die Spiel-Logik ersetzt. + *

+ * Wird in der finalen Implementierung durch die Spiel-Logik ersetzt. */ + @FXML public void onTableClick() { welcomeText.setText("Einsatz akzeptiert!"); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java index 331b823..5083ee6 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameUI.java @@ -17,6 +17,11 @@ import javafx.stage.Stage; */ public class CasinoGameUI extends Application { + /** Standardkonstruktor. */ + public CasinoGameUI() { + // default no-arg constructor + } + private static final int DEFAULT_WIDTH = 1200; private static final int DEFAULT_HEIGHT = 800; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java index 758acf6..7dd6526 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java @@ -50,6 +50,10 @@ import javafx.stage.Stage; */ public class CasinoBrowserController { + /** Standardkonstruktor. Initialisiert den CasinoBrowserController. */ + public CasinoBrowserController() { + // Intentionally left blank; controller initialization is FXML-driven. + } private static final Set TRUSTED_DOMAINS = new HashSet<>(); private static final CookieManager COOKIE_MANAGER = diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java index b780ddc..3e05817 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java @@ -13,15 +13,24 @@ import org.apache.logging.log4j.Logger; /** * Controller für die interaktive Taskleiste innerhalb der Poker-UI. * - *

Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und Verwaltung von + *

+ * Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und + * Verwaltung von * Spieleinsätzen, - Steuerung allgemeiner Menüfunktionen wie Exit. */ public class TaskbarController { + /** Standardkonstruktor. Wird von FXML verwendet. */ + public TaskbarController() { + // default constructor for FXML + } + private static final Logger LOGGER = LogManager.getLogger(CasinoBrowserController.class); - @FXML private HBox taskbar; - @FXML private TextField taskbarInput; + @FXML + private HBox taskbar; + @FXML + private TextField taskbarInput; private double xOffset = 0; private double yOffset = 0; @@ -31,7 +40,8 @@ public class TaskbarController { private static final int CREDIT_STEP = 5; /** - * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert die relative + * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert + * die relative * Position, um später korrekt zu verschieben. * * @param event Das Mausereignis @@ -43,10 +53,13 @@ public class TaskbarController { } /** - * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. Aktualisiert die Position + * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. + * Aktualisiert die Position * und skaliert die Taskleiste leicht zur visuellen Rückmeldung. * - *

TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster verschwinden + *

+ * TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster + * verschwinden * kann. * * @param event Das Mausereignis @@ -61,7 +74,8 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt die Skalierung der + * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt + * die Skalierung der * Taskleiste wieder auf Normalgröße. * * @param event Das Mausereignis @@ -85,7 +99,8 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst die + * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst + * die * Verarbeitung des Einsatzes aus. */ @FXML @@ -98,8 +113,7 @@ public class TaskbarController { javafx.application.Platform.runLater( () -> { // Game-Stage schließen - javafx.stage.Stage currentStage = - (javafx.stage.Stage) taskbar.getScene().getWindow(); + javafx.stage.Stage currentStage = (javafx.stage.Stage) taskbar.getScene().getWindow(); currentStage.close(); // Lobby-UI starten try { @@ -111,8 +125,10 @@ public class TaskbarController { } /** - * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich ganzzahlige Werte - * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 entsprechen + * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich + * ganzzahlige Werte + * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 + * entsprechen * (5er-Schritte). Der Einsatz wird aktuell nur auf der Konsole ausgegeben. */ private void processBet() { @@ -135,7 +151,9 @@ public class TaskbarController { /** * Öffnet den integrierten Casono Webbrowser. * - *

TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps & Tricks + *

+ * TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps + * & Tricks * Seite), sobald die Inhalte für Strategien und Support bereitstehen. */ @FXML -- 2.52.0 From 1d322f5cd8ffb646434875497e8cb009ff012781 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Wed, 1 Apr 2026 12:31:58 +0200 Subject: [PATCH 11/11] Style: Fix checkstyle for failed pipeline --- .../ui/gameui/CasinoGameController.java | 26 ++++-------- .../CasinoBrowserController.java | 18 ++++---- .../gameuicomponents/TaskbarController.java | 41 +++++++------------ 3 files changed, 33 insertions(+), 52 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java index 620a248..ae52485 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/CasinoGameController.java @@ -7,17 +7,11 @@ import javafx.scene.layout.VBox; /** * Controller für die Casino-Spielfläche. * - *

- * Verantwortlich für: - die Darstellung des Pokertisches und der - * Spieleroberfläche, - die - * Verarbeitung von Benutzereingaben, - die Schnittstelle zur GameEngine und zum - * Netzwerkprotokoll. + *

Verantwortlich für: - die Darstellung des Pokertisches und der Spieleroberfläche, - die + * Verarbeitung von Benutzereingaben, - die Schnittstelle zur GameEngine und zum Netzwerkprotokoll. * - *

- * Hinweise: - Die Methode `onTableClick()` dient aktuell nur als Test-Logik. - * Sie ist ggf. nicht - * mehr funktionsfähig und wird zukünftig durch die finale Spielinteraktion - * ersetzt. + *

Hinweise: - Die Methode `onTableClick()` dient aktuell nur als Test-Logik. Sie ist ggf. nicht + * mehr funktionsfähig und wird zukünftig durch die finale Spielinteraktion ersetzt. */ public class CasinoGameController { @@ -26,20 +20,16 @@ public class CasinoGameController { // default constructor for FXML } - @FXML - private Label welcomeText; - @FXML - private VBox casinoTable; + @FXML private Label welcomeText; + @FXML private VBox casinoTable; // TODO: Test-Logik: wird durch echte Spielinteraktionen ersetzt, // sobald die GameEngine fertig ist /** - * Temporäre Test-Methode, die bei Klick auf den Tisch eine Platzhalteraktion - * ausführt. + * Temporäre Test-Methode, die bei Klick auf den Tisch eine Platzhalteraktion ausführt. * - *

- * Wird in der finalen Implementierung durch die Spiel-Logik ersetzt. + *

Wird in der finalen Implementierung durch die Spiel-Logik ersetzt. */ @FXML public void onTableClick() { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java index 7dd6526..03c4644 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java @@ -27,6 +27,8 @@ import javafx.scene.shape.Rectangle; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** * Experimenteller integrierter Browser für Casono. @@ -54,13 +56,13 @@ public class CasinoBrowserController { public CasinoBrowserController() { // Intentionally left blank; controller initialization is FXML-driven. } + private static final Set TRUSTED_DOMAINS = new HashSet<>(); private static final CookieManager COOKIE_MANAGER = new CookieManager(null, CookiePolicy.ACCEPT_ORIGINAL_SERVER); - private static final org.apache.logging.log4j.Logger LOGGER = - org.apache.logging.log4j.LogManager.getLogger(CasinoBrowserController.class); + private static final Logger LOGGER = LogManager.getLogger(CasinoBrowserController.class); private static final int LOGO_HEIGHT = 40; private static final int CORNER_RADIUS = 40; @@ -358,8 +360,9 @@ public class CasinoBrowserController { fwdBtn.getStyleClass().add("gray-button"); fwdBtn.setOnAction( e -> { - if (engine.getHistory().getCurrentIndex() - < engine.getHistory().getEntries().size() - 1) { + int currentIndex = engine.getHistory().getCurrentIndex(); + int lastIndex = engine.getHistory().getEntries().size() - 1; + if (currentIndex < lastIndex) { engine.getHistory().go(1); } }); @@ -516,10 +519,11 @@ public class CasinoBrowserController { alert.setTitle("Unbekannte Website"); alert.setHeaderText("Diese Website ist nicht bekannt"); - alert.setContentText( + String content = host - + "\n\nDiese Seite ist nicht vom " - + "Casono Browser verifiziert.\nMöchten Sie sie trotzdem öffnen?"); + + "\n\nDiese Seite ist nicht vom Casono Browser verifiziert.\n" + + "Möchten Sie sie trotzdem öffnen?"; + alert.setContentText(content); var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH); Image logo = new Image(stream); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java index 3e05817..b446f3a 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/TaskbarController.java @@ -13,9 +13,7 @@ import org.apache.logging.log4j.Logger; /** * Controller für die interaktive Taskleiste innerhalb der Poker-UI. * - *

- * Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und - * Verwaltung von + *

Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und Verwaltung von * Spieleinsätzen, - Steuerung allgemeiner Menüfunktionen wie Exit. */ public class TaskbarController { @@ -27,10 +25,8 @@ public class TaskbarController { private static final Logger LOGGER = LogManager.getLogger(CasinoBrowserController.class); - @FXML - private HBox taskbar; - @FXML - private TextField taskbarInput; + @FXML private HBox taskbar; + @FXML private TextField taskbarInput; private double xOffset = 0; private double yOffset = 0; @@ -40,8 +36,7 @@ public class TaskbarController { private static final int CREDIT_STEP = 5; /** - * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert - * die relative + * Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert die relative * Position, um später korrekt zu verschieben. * * @param event Das Mausereignis @@ -53,13 +48,10 @@ public class TaskbarController { } /** - * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. - * Aktualisiert die Position + * Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. Aktualisiert die Position * und skaliert die Taskleiste leicht zur visuellen Rückmeldung. * - *

- * TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster - * verschwinden + *

TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster verschwinden * kann. * * @param event Das Mausereignis @@ -74,8 +66,7 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt - * die Skalierung der + * Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt die Skalierung der * Taskleiste wieder auf Normalgröße. * * @param event Das Mausereignis @@ -99,8 +90,7 @@ public class TaskbarController { } /** - * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst - * die + * Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst die * Verarbeitung des Einsatzes aus. */ @FXML @@ -112,8 +102,9 @@ public class TaskbarController { private void onExitButtonClick() { javafx.application.Platform.runLater( () -> { - // Game-Stage schließen - javafx.stage.Stage currentStage = (javafx.stage.Stage) taskbar.getScene().getWindow(); + // Close game stage + javafx.stage.Stage currentStage = + (javafx.stage.Stage) taskbar.getScene().getWindow(); currentStage.close(); // Lobby-UI starten try { @@ -125,10 +116,8 @@ public class TaskbarController { } /** - * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich - * ganzzahlige Werte - * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 - * entsprechen + * Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich ganzzahlige Werte + * im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 entsprechen * (5er-Schritte). Der Einsatz wird aktuell nur auf der Konsole ausgegeben. */ private void processBet() { @@ -151,9 +140,7 @@ public class TaskbarController { /** * Öffnet den integrierten Casono Webbrowser. * - *

- * TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps - * & Tricks + *

TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps & Tricks * Seite), sobald die Inhalte für Strategien und Support bereitstehen. */ @FXML -- 2.52.0