我可以在一个场景中从另一个场景设置 TextField 的值,同时显示两个场景吗?
Can I set the value of a TextField in one scene from another scene, while both scenes are showing?
我正在尝试从一个场景中使用值 selected 在另一个场景中填充 TextField。
所以有一个场景(我称之为父场景)带有一个 TextField 和一个打开另一个场景的按钮(我称之为子场景)。子场景有一个 TableView,我想将其 selected 值设置为父场景的 TextField。只有当带有 TextField 的场景尚未打开时,我才知道如何执行此操作,在我的例子中,子场景的舞台被设置为 showAndWait。所以我想我需要从子控制器获取父场景的舞台并将其设置为下面 select() 方法中的舞台字段。
// 来自子控制器的方法,当 select 从表视图中读取一行时调用
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();
}
谢谢。
您无需重新加载基本布局即可执行此操作,方法是:
- 从第二个控制器创建对象
- 在第二个控制器中创建一个方法来将传递的文本字段初始化为本地文本字段。
- 使用创建的对象和方法将您的文本字段传递给第二个控制器。
- 在第二个控制器上发生操作时更新您的文本字段。
此答案是对代码和步骤的总结here。
我正在尝试从一个场景中使用值 selected 在另一个场景中填充 TextField。
所以有一个场景(我称之为父场景)带有一个 TextField 和一个打开另一个场景的按钮(我称之为子场景)。子场景有一个 TableView,我想将其 selected 值设置为父场景的 TextField。只有当带有 TextField 的场景尚未打开时,我才知道如何执行此操作,在我的例子中,子场景的舞台被设置为 showAndWait。所以我想我需要从子控制器获取父场景的舞台并将其设置为下面 select() 方法中的舞台字段。
// 来自子控制器的方法,当 select 从表视图中读取一行时调用
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();
}
谢谢。
您无需重新加载基本布局即可执行此操作,方法是:
- 从第二个控制器创建对象
- 在第二个控制器中创建一个方法来将传递的文本字段初始化为本地文本字段。
- 使用创建的对象和方法将您的文本字段传递给第二个控制器。
- 在第二个控制器上发生操作时更新您的文本字段。
此答案是对代码和步骤的总结here。