如何进入其他班级的舞台?

问题描述 投票:0回答:1

我使用FXMLLOADER在

SignInUI.fxml
中加载fxml文件
LogUIController
。代码在这里:

Stage signIn = new Stage();
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("SignInUI.fxml"));
SignInUIController signInUIController = new SignInUIController();
signInUIController.setStage(signIn);
Scene sceneSignIn = new Scene(fxmlLoader.load());
signIn.setTitle("Sign In");
Image icon = new Image("calculator.jpg");
signIn.getIcons().add(icon);
signIn.setScene(sceneSignIn);
signIn.show();

我在

setStage
中写了一个叫
SignInUIController
的方法,可以给实例变量
stage
赋值:

public Stage stage;

public void setStage(Stage stage) {
    this.stage = stage;
}

我尝试在

SignInUIController
中构建
LogUIController
实例并调用
setStage
方法。最后,将
cancel
中的
SignInUIController
方法绑定到一个按钮,并使用实例变量
stage
来关闭舞台:

@FXML
private void cancel() throws IOException {
    stage.close();
}

但是每次都会出错:

Cannot invoke "javafx.stage.Stage.close()" because "this.stage" is null
。我不知道为什么,以及如何解决这个问题?

java javafx stage javafx-11
1个回答
0
投票

您没有在运行阶段绑定控制器,因此您放置父阶段的实例不是与实际渲染窗口链接的实例。 如果您想以编程方式设置它,请检查此answer

样品:

  FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("SignInUI.fxml"));
  fxmlLoader.setController(new SignInUIController());
© www.soinside.com 2019 - 2024. All rights reserved.