передача данных из одного окна в другое JavaFX

164
05 июля 2022, 20:00

Здесь на странице регистрации я хочу передать допустим имя в следующее окно вот так:

@FXML
private TextField nameFiled;
@FXML
private TextField colorField;
@FXML
private Button goServer;
@FXML
void initialize(){
    goServer.setOnAction(event -> {
        String name = nameFiled.getText();
        Client client;
        if (!nameFiled.getText().equals("")) {
            try {
                client = new Client(name);
                System.out.println(client);
                goServer.getScene().getWindow().hide();
                // Здесь я не очень понимаю, что я должен делать, я передал в конструктор имя человека
                WaitGame waitGame = new WaitGame(name);
                FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/waitGame.fxml"));
                loader.setController(waitGame);
                Parent page = FXMLLoader.load(waitGame.getClass().getResource("fxml/waitGame.fxml"));
                waitGame.initialize();
                Scene scene = new Scene(page, 1000, 720);
                Stage stage = new Stage();
                stage.setScene(scene);
                stage.showAndWait();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}

В этом классе я создаю конструктор, так как я хочу передать имя из предыдущего класса. в предыдущем классе я в ручную вызывал initialize, т.к. у меня не вызывается он и у меня вылетает ошибка NPE в labelNick.setText(name);

public class WaitGame {
    private String name;
    public WaitGame(String name) {
        this.name = name;
    }
    @FXML
    private Button buttonReady;;
    @FXML
    private ComboBox<?> boxColor;
    @FXML
    private Label countReady;
    @FXML
    private Label labelNick;
    @FXML
    void initialize(){
        labelNick.setText(name);
        countReady.setText("1/10");
    }
}

В общем было бы неплохо обьяснить как нужно пользоваться конструктором и initialize вместе и в принципе если можете дайте комментарии по коду.

Answer 1
WaitGame waitGame = new WaitGame(name);
FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/waitGame.fxml"));
loader.setController(waitGame);
Pane mainPane = loader.load();
Scene scene = new Scene(mainPane, 1000, 720);
READ ALSO
redirect и вызов в чем отличие

redirect и вызов в чем отличие

В контроллере есть метод:

235
css waterfall (masonry) layout only css

css waterfall (masonry) layout only css

возникла необходимость создать сетку по типу "водопад", но самый первый элемент должен занимать две колонки (все остальные элементы...

340
Применение маски к box-shadow

Применение маски к box-shadow

У меня есть div с примененной к нему маскойЯ заметил, что я не могу применить box-shadow к тому же самому div, поэтому я должен переместить тень на wrapper...

273
Прошу оценить вёрстку [закрыт]

Прошу оценить вёрстку [закрыт]

Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку...

320