JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben

Hallo,

ich habe zwei Stage und von einem kann ich die andere GUI über einen Button aufrufen.
Ich möchte einen Parameter übergeben wenn ich auf die andere GUI gehe.
zB: Ein stage mit einem Textfeld wo man seinen Namen schreibt und das zweite Fenster soll den Namen anzeigen.
Ich verwende nur Java kein Fxml.

Java:
Button counterBtn = new Button("Open WelcomeGUI");
        counterBtn.setOnAction(evt ->{
            counter++;
            new WelcomeGUI().start(new Stage());
        });
 
Wieso willst du der Stage übergeben? Ich vermute dein WelcomeGUI ist eine Pane, dann kannst du der den Labeltext mitgeben.

WelcomeGUI gui = new WelcomeGUI();
gui.setLabelText(label.getText())
 
Oder nutze eine Model, dass beide verwenden und anhand dessen das WelcomeGUI sich anpassen kann. Stichwort Dependency Injection (ob nun direkt via Constructor, über Setter oder irgendwelche DI-Frameworks (Spring Boot, Guice, ...) ist am Ende egal).
 
Wieso willst du der Stage übergeben? Ich vermute dein WelcomeGUI ist eine Pane, dann kannst du der den Labeltext mitgeben.

WelcomeGUI gui = new WelcomeGUI();
gui.setLabelText(label.getText())
Ich habe Stage übergeben weil die Klasse WelcomeGui von APplication erbt.
Ich versuche mal mit deiner Methode.
Ich kenne mich nicht so gut mit JavaFX.
@dzim danke, leider da kenne ich mich nicht so gut.
 
Moment. Du willst eine separate Application-Klasse starten? Das ist so aber nicht vorgesehen. Hinter der Application-Klasse verbirgt sich der gesamte JavaFX-Toolkit-Initialisierungs-Kram, den du nicht nocheinmal anstossen möchtest. Es ist in der Tat nicht notwendig, dass du eine Stage reinreichst.
Entferne das "extends Application" und das "@Override" (vor der Start-Methode). Erweitere den Constructor der WelcomeGUI so, dass du ein Modell übergeben kannst.

Java:
public class Model {
    private StringProperty name = SimpleStringProperty(null, "name", this);
    
    public String getName() {
        return name.getValue();
    }
    
    public void setName(String name) {
        this.name.setValue(name);
    }
    
    public StringProperty nameProperty() {
        return name;
    }
}
Java:
public class WelcomeGUI {
    
    private Model model;
    
    public WelcomeGUI(final Model model) {
        this.model = model;
    }
    
    public void show() {
        Stage stage = new Stage();
        // create your UI
        // ...
        // then init this UI from the model
        nameLabel.textProperty().bind(model.nameProperty());
    }
}
Java:
// create Model instance somewhere in the calling application,
// can even be stored in the Stage's properties
// public static final MODEL_KEY = "prop.app.model";
// stage.getProperties().put(MODEL_KEY, model);

Button counterBtn = new Button("Open WelcomeGUI");
counterBtn.setOnAction(evt ->{
  evtl.consume();
  counter++;
  new WelcomeGUI(model).init();
});

// example for the model property:
Model model = (Model) ((Stage) counterBtn.getScene().getWindow()).getProperties().get(MODEL_KEY);
PS: Komplett aus dem Gedächtnis runtergeschrieben - Fehler kannst du also behalten... :p
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben