JavaFX访问已创建控制器

我有一个包含3个场景的JavaFX,我们将它们称为A,B,C。从场景A,我通过按一个按钮转到场景B。从场景B,我以相同的方式转到场景C。现在出现了问题。在C场景中,我需要A场景中文本字段中的数据。我尝试在C控制器中创建一个类成员字段,并从A场景中进行设置,但它不起作用,因为转到场景C,我在场景B中调用load()方法(因此,基本上,这是C控制器的新实例)。

好的,所以我有了带有相应控制器的ResetPasswordPage.fxml:

public class ResetPasswordPageController {
private Databaseaccess databaseaccess = new Databaseaccess();
private String username;

@FXML
private TextField userFieldResetPasswordPage;

@FXML
void goToVerificationPage(actionEvent event) {
    ResultSet resultSet = databaseaccess.executeSelectQuery("SELECT email FROM USER WHERE username = ?",new Object[] { userFieldResetPasswordPage.getText() });
    try {
        if (!resultSet.next()) {
            System.out.println("User doesn't exist");
            return;
        }

        String email = resultSet.getString("email");
        this.username = userFieldResetPasswordPage.getText();

        FXMLLoader fxmlLoader = new FXMLLoader(getclass().getResource("NewPasswordPage.fxml"));
        Parent parent = fxmlLoader.load();
        NewPasswordPageController newPasswordPageController = fxmlLoader.getcontroller();
        newPasswordPageController.setUser(userFieldResetPasswordPage.getText()); // this is useless since I dont't
                                                                                    // go directly to
                                                                                    // NewPasswordPage,so I will
                                                                                    // have to call load method once
                                                                                    // again from the next screen

        int key = EmailSender.generateRandomKey();
        EmailSender.sendEmail(email,key);

        FXMLLoader fxmlLoader1 = new FXMLLoader(getclass().getResource("CodeVerificationPage.fxml"));
        Parent parent1 = fxmlLoader1.load();
        CodeVerificationPageController codeVerificationPageController = fxmlLoader1.getcontroller();
        codeVerificationPageController.setGeneratedKey(key);
        Utilities.changeScene(event,parent1);

    } catch (SQLException | IOException | MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public String getUser() {
    return username;

}

这里的问题是我没有直接从ResetPasswordPage转到NewPasswordPage,而是有一个中间页面(CodeVerificationPage),因此,如果我在ResetPasswordPage中设置此字段,则该字段将无效,因为NewPasswordPage场景是从CodeVerificationPage(中间页)。

wangkewei5724146 回答:JavaFX访问已创建控制器

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2443938.html

大家都在问