Input aus Sub-Fenster Startfenster übergeben

losolak

Mitglied
Hallo,
die JavaFX-App besteht aus 2 Fenstern, erstellt mit dem SceneBuilder (FXML).
1) StartFenster mit: - Label
- Button: um zusätzliches Fenster aufzumachen
2) Fenster 2 mit: - TextField: für User-Eingabe
- Button: User-Input wird im Label des Startfenster angezeigt.

Ich habe das Problem statisch gelöst. Wie wird es richtig gemacht?
Hier mein Code. Vielen Dank vorab!

upload_2017-1-15_18-3-44.png
 
Zuletzt bearbeitet:

Cromewell

Top Contributor
Du hast zwar keinen Code gepostet, daher weiß ich nicht, wie du es genau gemacht hast, aber man kann das mit einem TextInputDialog lösen :)
 

dzim

Top Contributor
Ich finde die Art, eine Stage zu überschreiben, etwas antiquirt, aber Grundsätzlich spricht nichts gegen deinen Ansatz.
Ich würde es nur vielleicht über ein zentrales Modell lösen (kann ja "zur Not" auch statisch geholt werden (Model#getInstance() oder so). Dort enthalten eine StringProperty.
Im Fenster 1 das Label#textProperty() an diese StringProperty binden. In Fenster 2 ein Binding StringProperty zum TextField#textProperty().
 

incluedu

Mitglied
Hallo

Du Fragst wie das richtig gemacht wird, aus meiner Sicht ist die eigentlich richtige Art das zu machen einen Callback (auch Listener genannt) zu erstellen. Ob die richtige Art einfacher ist lass ich mal dahingestellt, aber du bist auf alle fälle flexibler und Kannst dein Window1 auch ohne Änderungen in anderen Projekten verwenden. Dazu musst du allerdings dein Projekt ein wenig umbauen.

Als erstes musst du dir ein Interface für deinen Callback erstellen.
Java:
public interface MyCallback {
    void transferText(String text);
}
Dieses Interface musst du nun in deine Controller Klassen implementieren.
In der Window1Controller Klasse benötigst du eine Variable mit Setter für dein Callback Interface. In deiner onAction Methode musst du dann die Methode transferText von deinem Callback Interface aufrufen.
Java:
    private MyCallback myCallback;

    public void setMyCallback(MyCallback myCallback) {
        this.myCallback = myCallback;
    }
    public void handleBtnAction(ActionEvent actionEvent) {
        if (myCallback != null) myCallback.transferText(inputF.getText());
    }

In deine WindowStartController Klasse musst du das Callback Interface und die Methode transferText implementieren und dann in der implementierten Methode deinen Text setzen. Außerdem musst du in dem Window1Controller den Callback setzen.
Java:
public class WindowStartController implements Initializable, MyCallback {
@Override
    public void transferText(String text) {
        tlbl.setText(text);
    }
    private void handleBtnAction(ActionEvent actionEvent) {
        Window1 window1 = new Window1();
        window1.getController().setMyCallback(this);
    }
}

Damit du den Callback setzen kannst must du die Window1 Klasse noch ein wenig anpassen. Du must eine Variable mit deinem Controller erzeugen und diese initialisieren. An deinen Controller kommst du über den FXMLoader ran. Aus diesem Grund kannst du den Loader nicht mehr statisch verwenden. Dann benötigst du noch einen Getter für deinen Controller ... und eigentlich sollte es dann so funktionieren wie du das gerne hättest.
Java:
public class Window1 extends Stage {
    private Window1Controller controller;

    public Window1() {

        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("window1.fxml"));
            Parent root = loader.load();
            controller = loader.getController();
            setScene(new Scene(root, 600, 350));
            setTitle("Window 1");
            show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public Window1Controller getController() {
        return controller;
    }
}
 

dzim

Top Contributor
Oder du nutzt einfach, wie ich es beschrieben habe, Data-Binding. Damit ist der Code auch noch viel entkoppelter und du musst nicht die eine Stage der anderen Übergeben (egal, wie viele Interfaces du da ran klatschst, es bleibt die komplette Stage).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
raeuchertofu Input bei zwei jTextfields AWT, Swing, JavaFX & SWT 5
Hatsi09 GUI Input Farbe ändern AWT, Swing, JavaFX & SWT 0
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
J Event Handling Input auf String testen, Fehlermeldung ausgeben AWT, Swing, JavaFX & SWT 4
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
P JOptionPane input und show Message Dialog AWT, Swing, JavaFX & SWT 5
R SWT TreeViewer neuen Input setzen AWT, Swing, JavaFX & SWT 3
L Swing Input Focus eines JTextFields in einer JList AWT, Swing, JavaFX & SWT 2
T Input-Check bei Textfeldern in Table AWT, Swing, JavaFX & SWT 5
DEvent Je nach Auswahl in Liste entsprechende Input-Elemente anzeig AWT, Swing, JavaFX & SWT 2
M swt - input message box AWT, Swing, JavaFX & SWT 4
bernd Input Dialog AWT, Swing, JavaFX & SWT 2
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
berserkerdq2 Kann ich ein Rechteck mittig im Fenster halten, egal wie ich die Bildschirmgröße verändere? AWT, Swing, JavaFX & SWT 3
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
OZAN86 einfaches Fenster öffnen scheitert AWT, Swing, JavaFX & SWT 18
G Zuletzt aktives Fenster, vor dem aktuell aktiven AWT, Swing, JavaFX & SWT 2
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
MiMa JavaFX Fenster in JavaFX öffnen Schliessen (Initialisierung) AWT, Swing, JavaFX & SWT 20
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
platofan23 JAVAFX zweites Fenster öffnen AWT, Swing, JavaFX & SWT 2
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JavaFX Fenster 1 Array übertragen zur Fenster 2 AWT, Swing, JavaFX & SWT 0
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
O JavaFX Fenster scließen AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
B AWT Fenster schließt nicht AWT, Swing, JavaFX & SWT 2
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
K JavaFX ObservableList + Fenster AWT, Swing, JavaFX & SWT 6
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
N Swing Sorry nicht mal ein Fenster öffnen... AWT, Swing, JavaFX & SWT 19
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
L Daten in neuem Fenster AWT, Swing, JavaFX & SWT 2
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
K Java Button öffnet neues Fenster AWT, Swing, JavaFX & SWT 5
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
X Swing 2 Fenster (1 im Vordergrund) AWT, Swing, JavaFX & SWT 6
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
Tort-E JavaFX Fenster nachladen AWT, Swing, JavaFX & SWT 1
V Fenster in einem Fenster anordnen AWT, Swing, JavaFX & SWT 7
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben