java—将对象从一个窗口传递到现有窗口

68bkxrlz  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(271)

我还是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。
我该怎么做才能修好它?

dxpyg8gm

dxpyg8gm1#

在newstageopener中有个错误-我把它重建成这样:

private void newStageOpener(String resource, String stageTitle) {
    try {
        FXMLLoader loader = new FXMLLoader(ChildStageController.class.getResource(resource));
        Parent root = loader.load();
        Scene scene = new Scene(root);
        Stage stage = new Stage();
        stage.setScene(scene);
        stage.setTitle(stageTitle);
        stage.showAndWait();
        getObjectFromResource(resource, loader);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private void getObjectFromResource(String resource, FXMLLoader loader) {
    loader.setLocation(ChildStageController.class.getResource(resource));
    ChildStageController childStageController = loader.getController();
    message = childStageController.getMessage();
}

getmessage显然是从textfield获取文本。
现在它工作得很好。

相关问题