我正在开发我的项目,其中有用户界面,用户必须在登录阶段的文本字段中输入用户名和密码,这会将他移至下一个阶段,我想知道当前登录的是哪个用户。这两个阶段有单独的控制器。我尝试在登录阶段创建 setter 和 getter,将用户设置为他在用户名文本字段中输入的用户名,并从下一阶段获取它。
简化的登录屏幕:
private String currentUser;
public void setCurrentUser(String currentUser)
{
this.currentUser = currentUser;
}
public String getCurrentUser()
{
return currentUser;
}
public void validateLogin() {
DatabaseConnection connectNow = new DatabaseConnection();
Connection connectDB = connectNow.getConnection();
String verifyLogin = "SELECT count(1) FROM table WHERE username = '" + usernameTextField.getText() + "' AND password = '" + enterPasswordField.getText() + "'";
try {
Statement statement = connectDB.createStatement();
ResultSet queryResult = statement.executeQuery(verifyLogin);
while (queryResult.next()) {
if (queryResult.getInt(1) == 1) {
setCurrentUser(usernameTextField.getText());
openScreen();
} else {
loginMessageLabel.setText("No such user");
}
}
} catch (Exception e) {
e.printStackTrace();
e.getCause();
}
当我在成功登录后进入的阶段运行此方法时,它返回 null:
System.out.println(userController.getCurrentUser());
有什么方法可以让它这样工作吗?
抱歉解释不好,希望你明白我的意思
在第二个控制器中创建一个方法并将其命名为 initData 或其他名称。如果用户验证正确,您可以将用户名或电子邮件甚至对象从登录控制器传递到第二个控制器。
首先,在主控制器中创建 initData() 方法,并使用字符串或对象作为参数,因为您需要向其传递一些内容。在此示例中,传递给该方法的参数是 User 类的对象,但如果需要,您可以仅传递用户名字符串。不过,传递对象可以给您带来更大的灵活性。
//In main window controller
public void initData(User loggedUser) {
userLoggedIn = loggedUser;
labelUserLoggedIn.setText(userLoggedIn.getEmail());
}
然后,在登录控制器中,您可以进行用户验证,然后将对象/字符串传递到第二个控制器,然后再更改到第二个窗口。
这是我目前在应用程序中使用的一个示例。第一步是创建 FXMLLoader 的实例,然后加载 mainwindow.fxml,设置场景,获取第二个控制器,然后将对象传递给我们在更改为第二个窗口之前创建的 initData() 方法。
用户验证完成后,我使用此方法传递对象,然后更改到第二个窗口。可能有更好的方法来做到这一点,但这个效果很好。
// In second controller
public void changeToMainWindow() throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("mainwindow.fxml"));
Parent root = loader.load();
Scene mainScene = new Scene(root);
MainWindowController mainWindowController = loader.getController();
mainWindowController.initData(loggedUser);
Stage primaryStage = (Stage) loginButton.getScene().getWindow();
primaryStage.setScene(mainScene);
primaryStage.show();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)