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

Diskutiere Ein Parameter von einem Stage(GUI) zu einem anderen übergeben im AWT, Swing, JavaFX & SWT Bereich.
D

djesby

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());
        });
 
L

lam_tr

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())
 
dzim

dzim

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).
 
D

djesby

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.
 
dzim

dzim

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
 
D

djesby

@dzim Danke. Das hat geklappt.
Ich passe dann an, damit es nicht nach jedem Klick eine neue GUI öffnet.
 
Thema: 

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

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben