我还是java新手,在javafx中在两个窗口之间传递对象时遇到了问题。
我有主心骨控制器。控制器内部有两件东西:一个标签和一个按钮。该按钮将使用childstagecontroller打开一个新窗口(childstage)。
在childstagecontroller中,我有一个方法,它从textfield获取文本“testcontent”。我想把这个文本传递给现有的 Backbone.js ,并将标签文本设置为“testcontent”。
有很多主题处理类似的问题,但在我发现的每种情况下,问题都是将对象传递给新创建的窗口。我的情况正好相反:我需要将对象从新打开的窗口传递到现有的窗口。
@FXML
private Label label;
@FXML
private Button button;
private void configureButton() {
button.setOnAction(event -> {
newStageOpener(mainPaneResource, mainPaneStageTitle);
// There is magic to do
label.setText(message);
});
}
private void newStageOpener(String resource, String stageTitle){
try {
Parent parent = FXMLLoader.load(getClass().getResource(resource));
Scene scene = new Scene(parent);
Stage stage = new Stage();
stage.setScene(scene);
stage.setTitle(stageTitle);
stage.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
我尝试这样做,但是每次我得到一个nullpointerexception(调试器说childstagecontroller为null)。
FXMLLoader loader = new FXMLLoader(getClass().getResource(childPaneResource));
ChildStageController childStageController = loader.getController();
String message = childStageController.getMessage;
我也尝试过:使用setlocation,使用loader.load(),“reverse”problem(settext直接从childstagecontroller获得,而不是从mainstagecontroller获得),将newstageopener放入configurebutton中,但没有任何效果-我总是得到相同的nullpointerexception。
我该怎么做才能修好它?
1条答案
按热度按时间dxpyg8gm1#
在newstageopener中有个错误-我把它重建成这样:
getmessage显然是从textfield获取文本。
现在它工作得很好。