JavaFX: Wie kann ich einer Scene Argumente übergeben?

FRI3ND

Mitglied
Ich möchte ein JavaFX Frame für zwei unterschiedliche Aktionen nutzen; einmal, um einen neuen Datensatz zu speichern und einmal, um ihn anzupassen.
Es wäre in meinen Augen nicht sinnvoll, dafür jetzt zwei verschiedene fxml-Dateien und Controller-Klassen zu erstellen, dennoch habe ich bei meiner Recherche keine Möglichkeit gefunden, einem Frame vor dessen Start Argumente zu übergeben wie beispielsweise einem Swing-JFrame mit dessen Konstruktor.
Da man die Fenster allerdings auch öfters als nur einmal in der Sitzung öffnen können soll, fallen die Möglichkeiten der initialize-Methode und des Konstruktors leider weg.
Weiß jemand von euch, wie ich das Ganze realisieren kann, ohne dass ich meinen ganzen Code unleserlich mache?
Danke im Voraus!
 
Es wäre in meinen Augen nicht sinnvoll, dafür jetzt zwei verschiedene fxml-Dateien und Controller-Klassen zu erstellen,
Wieso nicht? Warum sollte denn ein Layout+Controller für 2 Anwendungsfälle (Speichern + Bearbeiten) zuständig sein?

Mal davon abgesehen:
Ich versteh nicht ganz was du mit "Argumente dem Frame zu übergeben" meinst. Versuch dich am Besten mal mit JavaFX-Terminologie auszudrücken bzw zeig mal anhand eines kleinen Beispieles was genau du gerne hättest
 
Ich versteh nicht ganz was du mit "Argumente dem Frame zu übergeben" meinst.

Java:
/* Code... */

scanner scr = new Scanner();
String auswahl = scr.next();

if (auswahl.equals("Bearbeiten") {
    new DataFrame(true);
} else {
    new DataFrame(false);
}

/* DataFrame */
public DataFrame(boolean bearbeiten)
    if (bearbeiten) {
        setzeBearbeitenEinstellungen();
    } else {
        setzeHinzufuegenEinstellungen();
    }
/* weiterer Code */
 
Wieso nicht? Warum sollte denn ein Layout+Controller für 2 Anwendungsfälle (Speichern + Bearbeiten) zuständig sein?
Das ist eine berechtigte Frage, insbesondere wenn ich mir die ifs im Code von @FRI3ND ansehe.

Oftmals ist es aber doch so, dass das UI absolut identisch ist, egal ob man neue Sätze anlegt oder vorhandene speichert. Der Unterschied besteht dann lediglich darin, ob man in der View ein ausgelesenes oder ein neues Objekt darstellt.
 
Um genaueres zu sagen müsste man genau wissen, was gewollt ist

Die Daten werden in einer txt-Datei nach dem Key-Value-Prinzip gespeichert; ich müsste also "nur" eine Integer übergeben. Allerdings muss eben beim Aufruf erkannt werden, dass es einen Parameter gibt, um die txt auszulesen und die Felder im Voraus mit Informationen zu füllen.
 
Die Datei kannst du doch bei jedem Start des Programms auslesen.. Wenn sie nicht leer ist dann werden die Felder mit Daten befüllt

Was genau möchtest du denn für eine Anwendung machen.. Klingt nach einer Art Verwaltung aber deine Grundidee hab ich noch nicht ganz verstanden ... Bzw klingt das Konzept für mich falsch
 
Die Datei kannst du doch bei jedem Start des Programms auslesen.. Wenn sie nicht leer ist dann werden die Felder mit Daten befüllt

Und woher weiß ich dann, welche "Zeile" die richtige ist, welche Zeile ich laden soll? Die Textdatei ist quasi eine csv-Datei, die ich allerdings nicht beliebig beschreiben darf; es ist wichtig, dass nur Key-Value-Paare darin vorhanden sind. Somit fällt die Möglichkeit, die Zeilenangabe in die erste Zeile zu schreiben, leider weg.
Hinzu kommt, dass das Erstellen einer neuen Datei für so etwas übertrieben wirkt, außerdem leidet die Performance auch darunter; ich bin mir sicher, dass man irgendwie im Aufruf Argumente übergeben und verarbeiten kann, leider weiß ich jedoch nicht, wie...
 
Ich hab den Ablauf des Programms noch nich wirklich verstanden.
Es gibt Datei mit Key-Value-Paare ... Jetzt hast du eine Anwendung, die immer eine Zeile aus der Datei darstellen soll aber wie soll das ablaufen?
Gibt es eine Tabelle mit allen Zeilen der Datei und wenn man auf eine Row in der Tabelle klickt soll zB der Datensatz geändert werden können? Wie wird bestimmt welche Zeile verändert werden soll?
 
Schau dir mal folgendes Tutorial an.. dort wird eigentlich ganz schön gezeigt wie man Daten an andere "Layouts/Controller" übergibt. Es ist nicht 100%ig das was du brauchst, geht aber in die Richtung.
 

Zurück
Oben