java - 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(中间页)..
解决方案
推荐阅读
- powershell - Powershell:Start-Job 中的 Copy-Item 似乎可以工作,但之后文件丢失
- vba - 工作文档中的 Word VBA ActiveDocument.PageWidth = 9999999
- c# - 如何在 C# 中实现 Twilio Conference HangUpOnStar
- excel - 基于列表的VBA搜索数据
- c# - 在美国文化中显示特定时间和日期的温度的格式
- c# - VS2017 社区 - windows 通用项目不支持页面
- angular - 如何在HttpClient GET调用whit responseType arraybuffer中获得完整响应(包括标头响应)
- angular - angular2 meteor ionic - 不能使用命名空间 Observable 作为类型
- java - 我可以使用解析器分离双打吗?爪哇
- python - 当我不想调用函数时,我无法阻止它们被调用