我有一个显示人的父窗口,即:
姓名:约翰
姓氏:布朗
年龄:18
我单击编辑按钮,子窗口打开,更改名字,然后单击接受,子窗口关闭,更改保存在 mysql 数据库中,但父窗口仍显示旧值。我确实有一个有效的刷新方法,但是如何从子窗口调用它或将其设置为在关闭子窗口后调用?
父窗口和子窗口都有控制器和 fxml。任何帮助,将不胜感激。
感谢@James_D,您应该使用setOnHidden而不是setOnCloseRequest,这样您就可以再次调用.close()并调用EventHandlerwill 。
你可以利用setOnCloseRequest:
childStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
// Refresh the parent window here
}
});
Run Code Online (Sandbox Code Playgroud)
要在子表单上调用此关闭请求,您可以执行以下操作:
childStage.getOnCloseRequest().handle(new WindowEvent(childStage, WindowEvent.WINDOW_CLOSE_REQUEST));
// or
childStage.fireEvent(new WindowEvent(childStage, WindowEvent.WINDOW_CLOSE_REQUEST));
Run Code Online (Sandbox Code Playgroud)
所以你可以像这样在子舞台上实现关闭按钮:
Button closeButton = new Button("Close");
closeButton.setOnAction(event -> childStage.fireEvent(new WindowEvent(childStage, WindowEvent.WINDOW_CLOSE_REQUEST)));
Run Code Online (Sandbox Code Playgroud)
我认为在 JavaFX 中自动更新字段的最好方法是使用属性。如果父窗口中的name字段绑定了一个SimpleStringProperty,则只需在子窗口关闭时设置该属性的值即可通知父窗口更新。
我做了一个小的父/子示例来测试这个概念,相关的一段代码是这样的,放在子创建方法上:
FXMLLoader loader = new FXMLLoader(getClass().getResource("Child.fxml"));
Parent root = loader.load();
ChildController controller = loader.getController();
name.textProperty().bind(controller.name.textProperty());
Run Code Online (Sandbox Code Playgroud)
字段名称是父项中的 Label 和子项中的 TextField。子文本中的任何更改都会立即反映在父文本中。
这是一个有趣的话题。我会尽快做一个完整的例子并在我的“a cup of java”博客中发布ir 。
| 归档时间: |
|
| 查看次数: |
9629 次 |
| 最近记录: |