[英]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.