[英]How to refresh parent window after closing child window in JavaFX?
我有一个显示人物的父窗口,即:
FirsName:约翰
名字:布朗
年龄:18
我单击编辑按钮,子窗口打开,更改名字然后单击接受,子窗口关闭,更改在mysql数据库中保存,但父窗口仍显示旧值。 我有一个有效的刷新方法,但是如何从子窗口调用它或将其设置为在关闭子窗口后调用?
父窗口和子窗口都有控制器和fxml。 任何帮助,将不胜感激。
感谢@James_D ,您应该使用setOnHidden
而不是setOnCloseRequest
,这样您就可以再次调用.close()
并调用EventHandler
。
你可以使用setOnCloseRequest
:
childStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
// Refresh the parent window here
}
});
要在子表单上调用此关闭请求,您可以执行以下操作:
childStage.getOnCloseRequest().handle(new WindowEvent(childStage, WindowEvent.WINDOW_CLOSE_REQUEST));
// or
childStage.fireEvent(new WindowEvent(childStage, WindowEvent.WINDOW_CLOSE_REQUEST));
所以你可以在子阶段上实现关闭按钮,如下所示:
Button closeButton = new Button("Close");
closeButton.setOnAction(event -> childStage.fireEvent(new WindowEvent(childStage, WindowEvent.WINDOW_CLOSE_REQUEST)));
我认为在JavaFX中进行自动字段更新的最佳方法是使用属性。 如果父窗口中的名称字段绑定到SimpleStringProperty,则只需在子窗口关闭时设置属性的值,以通知父窗口更新。
我做了一个小的父/子示例来测试这个概念,相关的代码就是这个,放在子创建方法上:
FXMLLoader loader = new FXMLLoader(getClass().getResource("Child.fxml"));
Parent root = loader.load();
ChildController controller = loader.getController();
name.textProperty().bind(controller.name.textProperty());
字段名称是父级中的Label和子级中的TextField。 子项文本的任何更改都会立即反映在父项中。
这是一个有趣的话题。 我将尽快制作一个完整的例子并在我的“一杯java”博客中发布。
如果使用弹出窗口,则可以将方法设置为showandwait,而不是仅从Stage对象中显示,并在运行更新GUI的方法之后。 因为showandwait方法在弹出窗口运行时暂停主框架,所以一旦弹出窗口关闭,它将运行您的更新代码。
stage.showAndWait();
updateGUI();
我们认为我们有两个阶段(窗口),1个父级阶段,2个子窗口(弹出窗口)
首先将父级的阶段对象发送到子阶段
在儿童舞台集:
childStage.setOnHidden(event->{ Parent root=FXMLLoader.load(getClass().getResource(parent fxml)); Scene scene=new Scene(root); parentStage.SetScene(scene); parentStage.show();
`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.