当两个场景都显示时,是否可以在另一个场景的一个场景中设置TextField的值?

时间:2019-05-24 21:50:40

标签: java javafx fxml

我正在尝试使用另一个场景中选择的值填充一个场景中的TextField。

所以有一个带有TextField的场景(我将其称为父场景)和一个用于打开另一个场景(称为子场景)的按钮。子场景具有一个TableView,我希望将其选择的值设置为父场景的TextField。我知道只有在尚未打开具有TextField的场景的情况下才能执行此操作,在我的情况下,子场景的舞台被设置为showAndWait。因此,我认为我需要获取父场景的舞台并将其设置为下面的子控制器中select()方法中的stage字段。

//子控制器中的方法,当从表视图中选择一行时调用

public void select() throws IOException
    { 
        Class class = (Class)table.getSelectionModel().getSelectedItem();
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getClassLoader().getResource("parentStage.fxml"));
        Parent parent = loader.load();
        Stage stage = // here i need to pass the parent stage I think;
        stage.initModality(Modality.APPLICATION_MODAL);
        ParentController parentController = loader.getController();


        table.setOnMouseClicked(event -> {
            if(event.getClickCount()==2){

       parentController.setTextField(new TextField(class.getValue()));

         stage.setScene(new Scene(parent));// also, 
I think, here it should be passed the already opened parent scene 
             stage.show();
            ((Node)(event.getSource())).getScene().getWindow().hide();
                }  });

//这是父场景中用于打开子场景的按钮的方法

 public void add() throws IOException
    {
     Parent parent = FXMLLoader.load(getClass().getClassLoader().getResource("childStage.fxml"));
        stage = new Stage();
        stage.initModality(Modality.APPLICATION_MODAL);
        stageProdusNou.setScene(new Scene(parent));
        stageProdusNou.showAndWait();

    }

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作,而无需重新加载基本布局,方法是:

  • 从第二个控制器创建对象
  • 在第二个控制器中创建一个方法,以将传递的文本字段初始化为本地文本字段。
  • 使用创建的对象和方法将文本字段传递给第二个控制器。
  • 在第二个控制器上发生操作时更新文本字段。

此答案是对代码和步骤here的总结。