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