commit afe9208c71aad6e21061854c628bd3a03d51405b
Author: naumueller <>
Date: Sun Oct 19 15:37:07 2025 +0200
First GUI with Metadata dialog created
diff --git a/nbactions.xml b/nbactions.xml
new file mode 100644
index 0000000..a0cb38e
--- /dev/null
+++ b/nbactions.xml
@@ -0,0 +1,40 @@
+
+
+
+ run
+
+ jar
+
+
+ clean
+ javafx:run
+
+
+
+ debug
+
+ clean
+ javafx:run@ide-debug
+
+
+ true
+
+
+
+ profile
+
+ clean
+ javafx:run@ide-profile
+
+
+
+ CUSTOM-jlink
+ jlink
+
+ clean
+
+ compile
+ javafx:jlink
+
+
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..af04bce
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,89 @@
+
+ 4.0.0
+ efi.projekt
+ Gesundheitsassistent
+ 1.0-SNAPSHOT
+
+ UTF-8
+ 11
+ 11
+
+
+
+ org.openjfx
+ javafx-controls
+ 13
+
+
+ org.openjfx
+ javafx-fxml
+ 13
+
+
+ io.github.mkpaz
+ atlantafx-base
+ 2.1.0
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+ 11
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ 0.0.4
+
+ efi.projekt.gesundheitsassistent.FxStart
+
+
+
+
+
+ default-cli
+
+
+
+
+ debug
+
+
+
+
+
+
+
+
+ ide-debug
+
+
+
+
+
+
+
+
+ ide-profile
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/FxStart.java b/src/main/java/efi/projekt/gesundheitsassistent/FxStart.java
new file mode 100644
index 0000000..807c127
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/FxStart.java
@@ -0,0 +1,73 @@
+package efi.projekt.gesundheitsassistent;
+
+import atlantafx.base.theme.NordDark;
+import efi.projekt.gesundheitsassistent.controller.MetadataDialogController;
+import efi.projekt.gesundheitsassistent.model.Metadata;
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+
+public class FxStart extends Application {
+
+ private static Scene scene;
+ private Metadata metadata; // das zentrale Model
+
+ @Override
+ public void start(Stage primaryStage) throws IOException {
+
+ // 1️⃣ Metadata Model erzeugen
+ metadata = new Metadata();
+
+ // 2️⃣ Metadata Dialog laden
+ FXMLLoader dialogLoader = new FXMLLoader(getClass()
+ .getResource("/efi/projekt/gesundheitsassistent/view/MetadataDialog.fxml"));
+ Parent dialogRoot = dialogLoader.load();
+
+ // Controller bekommen und Model übergeben
+ MetadataDialogController dialogController = dialogLoader.getController();
+ dialogController.setMetadata(metadata);
+
+ // 3️⃣ Dialog Stage erzeugen
+ Stage dialogStage = new Stage();
+ dialogStage.setTitle("Metadaten eingeben");
+ dialogStage.initModality(Modality.APPLICATION_MODAL); // blockiert Hauptfenster
+ dialogStage.setScene(new Scene(dialogRoot));
+ dialogStage.showAndWait(); // wartet bis Dialog geschlossen wird
+
+ // 4️⃣ Hauptfenster laden
+ FXMLLoader mainLoader = new FXMLLoader(getClass()
+ .getResource("/efi/projekt/gesundheitsassistent/view/FxView.fxml"));
+ Parent mainRoot = mainLoader.load();
+
+ scene = new Scene(mainRoot, 1280, 720);
+ Application.setUserAgentStylesheet(new NordDark().getUserAgentStylesheet());
+
+ primaryStage.setTitle("Virtueller Gesundheitsassistent");
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+
+ static void setRoot(String fxml) throws IOException {
+ scene.setRoot(loadFXML(fxml));
+ }
+
+ private static Parent loadFXML(String fxml) throws IOException {
+ FXMLLoader fxmlLoader = new FXMLLoader(
+ FxStart.class.getResource("/efi/projekt/gesundheitsassistent/view/" + fxml + ".fxml")
+ );
+ return fxmlLoader.load();
+ }
+
+ public static void main(String[] args) {
+ launch();
+ }
+
+ public Metadata getMetadata() {
+ return metadata;
+ }
+}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/controller/FxViewController.java b/src/main/java/efi/projekt/gesundheitsassistent/controller/FxViewController.java
new file mode 100644
index 0000000..39587cf
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/controller/FxViewController.java
@@ -0,0 +1,48 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMLController.java to edit this template
+ */
+package efi.projekt.gesundheitsassistent.controller;
+
+import efi.projekt.gesundheitsassistent.model.FxModel;
+import java.net.URL;
+import java.util.ResourceBundle;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Button;
+import javafx.scene.control.ButtonType;
+
+/**
+ * FXML Controller class
+ *
+ * @author aumni
+ */
+public class FxViewController implements Initializable {
+
+ private FxModel model;
+
+ @FXML
+ private Button exitButton;
+
+ /**
+ * Initializes the controller class.
+ */
+ @Override
+ public void initialize(URL url, ResourceBundle rb) {
+
+ }
+
+ @FXML
+ private void handleExit() {
+ Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "Programm wirklich beenden?");
+ alert.showAndWait()
+ .filter(response -> response == ButtonType.OK)
+ .ifPresent(response -> System.exit(0));
+
+ }
+
+ public void setModel(FxModel model) {
+ this.model = model;
+ }
+}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/controller/MetadataDialogController.java b/src/main/java/efi/projekt/gesundheitsassistent/controller/MetadataDialogController.java
new file mode 100644
index 0000000..47d90a7
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/controller/MetadataDialogController.java
@@ -0,0 +1,76 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package efi.projekt.gesundheitsassistent.controller;
+
+import efi.projekt.gesundheitsassistent.model.Metadata;
+import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.ButtonType;
+import javafx.scene.control.ChoiceBox;
+import javafx.scene.control.TextField;
+import javafx.stage.Stage;
+
+/**
+ *
+ * @author aumni
+ */
+public class MetadataDialogController {
+
+ @FXML
+ private TextField nameField;
+
+ @FXML
+ private TextField ageField;
+
+ @FXML
+ private ChoiceBox genderChoiceBox;
+
+ @FXML
+ private TextField heightField;
+
+ @FXML
+ private TextField weightField;
+
+ private Metadata metadata;
+
+ public void initialize() {
+ // ChoiceBox füllen
+ genderChoiceBox.getItems().addAll("Männlich", "Weiblich", "Divers");
+ genderChoiceBox.setValue("Männlich"); // default
+ }
+
+ public void setMetadata(Metadata metadata) {
+ this.metadata = metadata;
+ bindFields();
+ }
+
+ private void bindFields() {
+ // Bidirektionales Binding zwischen Model und UI
+ nameField.textProperty().bindBidirectional(metadata.nameProperty());
+ ageField.textProperty().bindBidirectional(metadata.ageProperty(), new javafx.util.converter.NumberStringConverter());
+ genderChoiceBox.valueProperty().bindBidirectional(metadata.genderProperty());
+ heightField.textProperty().bindBidirectional(metadata.heightProperty(), new javafx.util.converter.NumberStringConverter());
+ weightField.textProperty().bindBidirectional(metadata.weightProperty(), new javafx.util.converter.NumberStringConverter());
+ }
+
+ @FXML
+ private void handleOk() {
+ try {
+ metadata.validate();
+ // Dialog schließen
+ Stage stage = (Stage) nameField.getScene().getWindow();
+ stage.close();
+ } catch (IllegalArgumentException e) {
+ Alert alert = new Alert(Alert.AlertType.ERROR, e.getMessage(), ButtonType.OK);
+ alert.showAndWait();
+ }
+ }
+
+ @FXML
+ private void handleCancel() {
+ Stage stage = (Stage) nameField.getScene().getWindow();
+ stage.close();
+ }
+}
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/model/FxModel.java b/src/main/java/efi/projekt/gesundheitsassistent/model/FxModel.java
new file mode 100644
index 0000000..912bbf8
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/model/FxModel.java
@@ -0,0 +1,37 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package efi.projekt.gesundheitsassistent.model;
+
+import java.io.Serializable;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+
+/**
+ *
+ * @author aumni
+ */
+/**
+ * Superklasse für alle Modelle
+ */
+
+public class FxModel implements Serializable {
+
+ private final StringProperty id = new SimpleStringProperty(this, "id");
+
+ public FxModel() {}
+
+ public FxModel(String id) {
+ this.id.set(id);
+ }
+
+ public StringProperty idProperty() { return id; }
+ public String getId() { return id.get(); }
+ public void setId(String id) { this.id.set(id); }
+
+ public void validate() throws IllegalArgumentException {
+ // Subklassen können überschreiben
+ }
+}
+
diff --git a/src/main/java/efi/projekt/gesundheitsassistent/model/Metadata.java b/src/main/java/efi/projekt/gesundheitsassistent/model/Metadata.java
new file mode 100644
index 0000000..96d5995
--- /dev/null
+++ b/src/main/java/efi/projekt/gesundheitsassistent/model/Metadata.java
@@ -0,0 +1,100 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package efi.projekt.gesundheitsassistent.model;
+
+import javafx.beans.property.*;
+
+/**
+ *
+ * @author aumni
+ */
+public class Metadata extends FxModel {
+ private StringProperty name = new SimpleStringProperty(this, "name");
+ private IntegerProperty age = new SimpleIntegerProperty(this, "age");
+ private StringProperty gender = new SimpleStringProperty(this, "gender");
+ private DoubleProperty height = new SimpleDoubleProperty(this, "height"); //in cm
+ private DoubleProperty weight = new SimpleDoubleProperty(this, "weight"); //in kg
+
+ public Metadata() {};
+
+ public Metadata(String name, int age, String gender, double height, double weight) {
+ this.name.set(name);
+ this.age.set(age);
+ this.gender.set(gender);
+ this.height.set(height);
+ this.weight.set(weight);
+ }
+
+ // Properties
+ public StringProperty nameProperty() {
+ return name;
+ }
+
+ public IntegerProperty ageProperty() {
+ return age;
+ }
+
+ public StringProperty genderProperty() {
+ return gender;
+ }
+
+ public DoubleProperty heightProperty() {
+ return height;
+ }
+
+ public DoubleProperty weightProperty() {
+ return weight;
+ }
+
+ //Getter & Setter
+ public String getName() {
+ return name.get();
+ }
+
+ public void setName(String name) {
+ this.name.set(name);
+ }
+
+ public int getAge() {
+ return age.get();
+ }
+
+ public void setAge(int age) {
+ this.age.set(age);
+ }
+
+ public String getGender() {
+ return gender.get();
+ }
+
+ public void setGender(String gender) {
+ this.gender.set(gender);
+ }
+
+ public double getHeight() {
+ return height.get();
+ }
+
+ public void setHeight(double height) {
+ this.height.set(height);
+ }
+
+ public double getWeight() {
+ return weight.get();
+ }
+
+ public void setWeight(double weight) {
+ this.weight.set(weight);
+ }
+
+ @Override
+ public void validate() {
+ if (getName() == null || getName().isBlank()) throw new IllegalArgumentException("Name darf nicht leer sein") ;
+ if (getAge() < 0) throw new IllegalArgumentException("Alter darf nicht negativ sein");
+ if (getGender() == null || getGender().isBlank()) throw new IllegalArgumentException("Geschlecht muss gesetzt sein");
+ if (getHeight() <= 0) throw new IllegalArgumentException("Größe muss größer 0 sein");
+ if (getWeight() <= 0) throw new IllegalArgumentException("Gewicht muss größer 0 sein");
+ }
+}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
new file mode 100644
index 0000000..449cd3d
--- /dev/null
+++ b/src/main/java/module-info.java
@@ -0,0 +1,13 @@
+module efi.projekt.gesundheitsassistent {
+ requires javafx.controls;
+ requires javafx.fxml;
+ requires java.base;
+ requires atlantafx.base;
+
+ opens efi.projekt.gesundheitsassistent to javafx.fxml;
+ opens efi.projekt.gesundheitsassistent.controller to javafx.fxml;
+
+ exports efi.projekt.gesundheitsassistent;
+ exports efi.projekt.gesundheitsassistent.controller;
+}
+
diff --git a/src/main/resources/efi/projekt/gesundheitsassistent/styles/fxview.css b/src/main/resources/efi/projekt/gesundheitsassistent/styles/fxview.css
new file mode 100644
index 0000000..d0a5706
--- /dev/null
+++ b/src/main/resources/efi/projekt/gesundheitsassistent/styles/fxview.css
@@ -0,0 +1,93 @@
+/*
+ * Empty Stylesheet file.
+ */
+
+.mainFxmlClass {
+
+}
+
+/* =========================================================
+ Virtueller Gesundheitsassistent - Fahrzeug UI Design
+ ========================================================= */
+
+.root {
+ -fx-font-family: "Segoe UI", "Roboto", sans-serif;
+ -fx-background-color: linear-gradient(to bottom, #0f2027, #203a43, #2c5364);
+ -fx-text-fill: #e0e0e0;
+}
+
+/* -------------------- Überschriften & Text -------------------- */
+.label {
+ -fx-text-fill: #ffffff;
+ -fx-font-size: 16px;
+}
+
+.title-label {
+ -fx-font-size: 22px;
+ -fx-font-weight: bold;
+}
+
+/* -------------------- Buttons -------------------- */
+.button {
+ -fx-background-color: linear-gradient(to bottom, #00b4db, #0083b0);
+ -fx-text-fill: white;
+ -fx-font-size: 16px;
+ -fx-background-radius: 10;
+ -fx-padding: 8 20;
+}
+
+.button:hover {
+ -fx-background-color: linear-gradient(to bottom, #00d2ff, #3a7bd5);
+}
+
+/* -------------------- Panels -------------------- */
+.titled-pane {
+ -fx-background-color: #1b2838;
+ -fx-text-fill: #ffffff;
+}
+
+.titled-pane > .title {
+ -fx-background-color: #273b4a;
+ -fx-padding: 10;
+}
+
+.titled-pane > .content {
+ -fx-background-color: #1f2f3a;
+}
+
+/* -------------------- Charts -------------------- */
+.chart {
+ -fx-background-color: transparent;
+}
+
+.chart-plot-background {
+ -fx-background-color: rgba(255, 255, 255, 0.05);
+ -fx-border-color: #00b4db;
+ -fx-border-radius: 8;
+}
+
+.axis {
+ -fx-tick-label-fill: #cccccc;
+}
+
+.axis-label {
+ -fx-text-fill: #ffffff;
+}
+
+/* -------------------- Avatar Container -------------------- */
+#avatarContainer {
+ -fx-background-color: rgba(0, 0, 0, 0.3);
+ -fx-border-color: #00b4db;
+ -fx-border-width: 2;
+ -fx-border-radius: 12;
+}
+
+/* -------------------- Scrollbar -------------------- */
+.scroll-bar:horizontal, .scroll-bar:vertical {
+ -fx-background-color: transparent;
+}
+
+.scroll-bar .thumb {
+ -fx-background-color: #00b4db;
+ -fx-background-radius: 10;
+}
diff --git a/src/main/resources/efi/projekt/gesundheitsassistent/view/FxView.fxml b/src/main/resources/efi/projekt/gesundheitsassistent/view/FxView.fxml
new file mode 100644
index 0000000..216e4c7
--- /dev/null
+++ b/src/main/resources/efi/projekt/gesundheitsassistent/view/FxView.fxml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/efi/projekt/gesundheitsassistent/view/MetadataDialog.fxml b/src/main/resources/efi/projekt/gesundheitsassistent/view/MetadataDialog.fxml
new file mode 100644
index 0000000..15c23cc
--- /dev/null
+++ b/src/main/resources/efi/projekt/gesundheitsassistent/view/MetadataDialog.fxml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+