我正在做java fx而且我坚持将变量传递到不同的FXML场景中。所以在第一个场景控制器上,LoginController与Login.fxml
相关联public class LoginController {
@FXML private TextField username;
@FXML private PasswordField password;
@FXML private Button loginButton;
@FXML private Label labelStatus;
@FXML private void handleLoginButton() throws InterruptedException {
try {
FXMLLoader mainLoad = new FXMLLoader(getClass().getResource("../View/mainscreen.fxml"));
Parent mainRoot = (Parent) mainLoad.load();
Stage stage = new Stage();
stage.setScene(new Scene(mainRoot));
stage.show();
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}
当新场景打开时,我需要根据包含用户输入的用户名变量设置标签。这意味着我们需要通过controoler将变量从Login.fxml传递到mainscreen.fxml。我如何实现这一目标?
答案 0 :(得分:2)
最简单的方法是通过setter在MainScreenController
中设置正确的字段。 Yo可以通过FXMLoader#getController()
方法(https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/FXMLLoader.html#getController--)获得负责此fxml的控制器。
其他方式取决于您的应用程序架构。应该有一个对象负责存储这种信息。
答案 1 :(得分:2)
您可以获取下一个场景控制器并传递变量
FXMLLoader loader = new FXMLLoader(getClass().getResource("mainscreen.fxml"));
MainScreenController controller = loader.getController();
controller.setUserName(userName);