Tenho Controller.java para Scene.fxml e ControllerSettings.java para WindowSettings.fxml. Em Controller.java, crio uma nova janela pop-up (sem caixa de diálogo) com o seguinte método:
@FXML
public void handleSubmenuSettings(ActionEvent event) throws IOException {
Stage stage;
Parent root;
ControllerSettings controller;
stage = new Stage();
FXMLLoader loader = new FXMLLoader(getClass().getResource("WindowSettings.fxml"));
root = (Parent) loader.load();
controller = (ControllerSettings) loader.getController();
stage.setScene(new Scene(root));
stage.setTitle("Settings");
stage.initModality(Modality.APPLICATION_MODAL);
stage.setResizable(false);
stage.initOwner(submenuSettings.getScene().getWindow());
stage.showAndWait();
stage.setOnCloseRequest(e -> {
e.consume();
controller.saveSettings();
stage.close();
});
}
Quero salvar as configurações ao fechar a nova janela pop-up, mas isso não funciona com stage.setOnCloseRequest.
O showAndWait()
método bloqueará a execução até que a janela seja fechada; ou seja, as instruções subsequentes não serão executadas até que a janela seja fechada. Portanto, você não registra o ouvinte para a solicitação de fechamento até que a janela seja fechada. Obviamente, nenhuma solicitação para fechar a janela ocorrerá depois que ela for fechada, portanto, seu manipulador nunca é chamado.
De qualquer forma, não está muito claro por que você está usando um manipulador de solicitação de fechamento. Presumivelmente, você simplesmente deseja ligar controller.saveSettings()
depois que a janela fechar. Já que você está usando, showAndWait()
você pode apenas fazer:
@FXML
public void handleSubmenuSettings(ActionEvent event) throws IOException {
Stage stage;
Parent root;
ControllerSettings controller;
stage = new Stage();
FXMLLoader loader = new FXMLLoader(getClass().getResource("WindowSettings.fxml"));
root = (Parent) loader.load();
controller = (ControllerSettings) loader.getController();
stage.setScene(new Scene(root));
stage.setTitle("Settings");
stage.initModality(Modality.APPLICATION_MODAL);
stage.setResizable(false);
stage.initOwner(submenuSettings.getScene().getWindow());
stage.showAndWait();
controller.saveSettings();
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras