From ac9e7eecffea8c98bf40bc9f289d5bb5d6874eba Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Wed, 11 Mar 2026 11:36:57 +0100 Subject: [PATCH] Add: Main UI, UI Launcher --- .../dbis/cs108/casono/client/ui/Launcher.java | 10 ++ .../casono/client/ui/lobby/Casinomainui.java | 26 +++ .../ui/lobby/CasinomainuiController.java | 49 ++++++ .../client/ui/resources/Casinomainui.css | 151 ++++++++++++++++++ .../client/ui/resources/Casinomainui.fxml | 113 +++++++++++++ 5 files changed, 349 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/Casinomainui.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/CasinomainuiController.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.css create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.fxml diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java new file mode 100644 index 0000000..19c5f05 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/Launcher.java @@ -0,0 +1,10 @@ +package ch.unibas.dmi.dbis.cs108.casono.client.ui; + +import javafx.application.Application; + +public class Launcher { + public static void main(String[] args) { + Application.launch(ch.unibas.dmi.dbis.cs108.casono.client.ui.lobby.Casinomainui.class, args); + } +} + \ No newline at end of file diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/Casinomainui.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/Casinomainui.java new file mode 100644 index 0000000..811b9e9 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/Casinomainui.java @@ -0,0 +1,26 @@ +package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobby; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.stage.Stage; + +import java.io.IOException; + +public class Casinomainui extends Application { + @Override + public void start(Stage stage) throws IOException { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Casinomainui.fxml")); + Scene scene = new Scene(fxmlLoader.load(), 1200, 800); + stage.setTitle("Casono"); + + stage.getIcons().add(new javafx.scene.image.Image(getClass().getResource("/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/logoinverted.png").toExternalForm())); + stage.setScene(scene); + stage.setFullScreen(true); + stage.show(); + } + + public static void main(String[] args) { + launch(); + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/CasinomainuiController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/CasinomainuiController.java new file mode 100644 index 0000000..c96b035 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/lobby/CasinomainuiController.java @@ -0,0 +1,49 @@ +package ch.unibas.dmi.dbis.cs108.casono.client.ui.lobby; +import javafx.application.Platform; +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import javafx.scene.layout.AnchorPane; +import javafx.scene.control.Button; +import javafx.scene.image.ImageView; +import javafx.scene.shape.Rectangle; +import javafx.application.Platform; +import javafx.fxml.FXML; +import javafx.scene.control.Label; +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 javafx.scene.layout.AnchorPane; + +public class CasinomainuiController { + @FXML + private AnchorPane rootPane; + @FXML + private Label titleLabel; + @FXML + private Label subtitleLabel; + @FXML + private javafx.scene.image.ImageView logoView; + @FXML + private javafx.scene.shape.Rectangle greenBox; + @FXML + private Button exitbutton; + + + + + public void initialize() { + titleLabel.setText("Casono"); + subtitleLabel.setText("Texas Hold'em Poker"); + // Logo laden + logoView.setImage(new javafx.scene.image.Image(getClass().getResource("/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/images/logo.png").toExternalForm())); + } + + @FXML + public void handleexitbutton() { + Platform.exit(); + } + +} + diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.css b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.css new file mode 100644 index 0000000..2951f39 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.css @@ -0,0 +1,151 @@ +/* Pixel-Art Font (WICHTIG: Nutze eine Monospace-Schrift für Pixel-Look) */ +.root { + -fx-background-color: #000000; + -fx-font-family: "Monospaced", "Courier New"; +} + +.anchor-pane-bg { + -fx-background-color: #ffffff; + /* Optional: Bild entfernen oder als Overlay nutzen */ + -fx-background-image: url("images/background.png"); + -fx-background-size: cover; + -fx-background-position: center center; + -fx-background-repeat: no-repeat; +} + +/* DIE SCHWEBENDE INFO-BOX (PIXEL-STYLE) */ +.floating-chat-box { + -fx-background-color: #0d9e3b; + /* Pixel-Ränder: Keine Rundung (0px) oder nur sehr kleine Stufen */ + -fx-background-radius: 58; + -fx-border-radius: 50; + -fx-border-color: #5c3d10 #3d260a #3d260a #5c3d10; + -fx-border-width: 12; + -fx-padding: 20; + /* Harter Schatten statt weicher Glow */ + -fx-effect: dropshadow(one-pass-box, rgba(0,0,0,1), 0, 0, 15, 15); +} + +.chat-header { + -fx-text-fill: #ffffff; + -fx-font-size: 22px; + -fx-font-weight: bold; + -fx-padding: 0 0 10 0; +} + +.info-text { + -fx-text-fill: #ffffff; + -fx-font-size: 16px; +} + +/* DER OVALE PIXEL-TISCH */ +.casino-table { + -fx-background-color: #0d9e3b; /* Feste Farbe statt Gradient für Pixel-Look */ + /* Oval durch festen Radius - Pixel-Art-Ovale sind stufig */ + -fx-background-radius: 2000; + -fx-border-radius: 2000; + + /* Dicker, eckiger Holzrand */ + -fx-border-color: #5c3d10 #3d260a #3d260a #5c3d10; + -fx-border-width: 12; + +} + + +.table-title { + -fx-text-fill: #ffffff; + -fx-font-size: 28px; + -fx-font-weight: bold; + -fx-effect: dropshadow(one-pass-box, #000, 0, 0, 3, 3); +} + + + + +/* Hauptcontainer der Statusbox */ +.player-status-pane { + -fx-background-color: rgb(129, 13, 158); + -fx-background-radius: 15; + -fx-border-radius: 15; + + /* -fx-border-color: #5c3d10 #3d260a #3d260a #5c3d10; + -fx-border-width: 2; + -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 10, 0, 0, 4);*/ +} + +.player-status-pane:hover { + -fx-translate-y: -3; +} + +/* Die zwei inneren Boxen */ +.status-inner-box-top { + -fx-background-color: rgb(13, 93, 158); + -fx-background-radius: 19; + -fx-border-radius: 15; + -fx-padding: 5 10; + -fx-border-color: #5c3d10 #3d260a #3d260a #5c3d10; + -fx-border-width: 3; + -fx-effect: dropshadow(one-pass-box, rgba(0, 0, 0, 0.8), 0, 0, 3, 3); +} + +.status-inner-box-midle { + -fx-background-color: rgba(13, 158, 59, 0); +} + +.status-inner-box-bottom { + -fx-background-color: rgb(158, 13, 102); + -fx-background-radius: 19; + -fx-border-radius: 15; + -fx-padding: 5 10; + -fx-border-color: #5c3d10 #3d260a #3d260a #5c3d10; + -fx-border-width: 3; + -fx-effect: dropshadow(one-pass-box, rgba(0, 0, 0, 0.8), 0, 0, 3, 3); +} + +.table-title { + /* Titel-Text anpassen */ + -fx-text-fill: #ffffff; + -fx-font-size: 32px; + -fx-font-weight: bold; + -fx-effect: dropshadow(one-pass-box, #000, 0, 0, 3, 3); + -fx-padding: 10 0 0 0; /* Abstand nach oben */ +} + +.green-box { + /* Grüne Box anpassen */ + -fx-fill: #4CAF50; + -fx-stroke: #FFFFFF; + -fx-stroke-width: 3; + -fx-effect: dropshadow(one-pass-box, #000, 0, 0, 10, 10); + -fx-padding: 0 0 40 0; +} + +.button-exit { + -fx-background-radius: 12; + -fx-border-radius: 12; + -fx-font-family: "Courier New"; + -fx-font-weight: bold; + -fx-border-width: 2; + -fx-padding: 6 15; + -fx-cursor: hand; +} + +.button-exit:hover { + -fx-translate-y: -3; + -fx-effect: dropshadow(one-pass-box, rgba(0, 0, 0, 0.8), 0, 0, 3, 3); +} + +.button-exit { + -fx-background-color: #8b0000; + -fx-border-color: #ff4444; + -fx-text-fill: white; + -fx-background-radius: 12; + -fx-border-radius: 12; + -fx-font-family: "Courier New"; + -fx-font-weight: bold; + -fx-border-width: 2; + -fx-padding: 6 15; + -fx-cursor: hand; +} + + diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.fxml b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.fxml new file mode 100644 index 0000000..02490da --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/resources/Casinomainui.fxml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +