gpt4 book ai didi

window - 阻止或取消退出 JavaFX 2

转载 作者:行者123 更新时间:2023-12-02 11:39:28 25 4
gpt4 key购买 nike

退出 JavaFX 程序时,我将重写 Application.stop() 以检查未保存的更改。这工作正常,但最好为用户提供取消操作的选项。

最佳答案

Application.stop() 是最后机会沙龙,换句话说,虽然它确实捕获了退出,但撤销退出过程有点晚了。

更好的是为关闭请求设置一个监听器,可以通过使用事件来取消该请求。

在应用程序类中:

public void start(Stage stage) throws Exception {
FXMLLoader ldr = new FXMLLoader(getClass()
.getResource("Application.fxml"));
Parent root = (Parent) ldr.load();
appCtrl = (ApplicationController) ldr.getController();

Scene scene = new Scene(root);

stage.setScene(scene);
stage.show();

scene.getWindow().setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent ev) {
if (!appCtrl.shutdown()) {
ev.consume();
}
}
});
}

然后在应用程序 Controller 中,引用为上面的 appCtrl:

/** reference to the top-level pane                               */
@FXML
private AnchorPane mainAppPane;

public boolean shutdown() {
if (model.isChanged()) {
DialogResult userChoice =
ConfirmDialog.showYesNoCancelDialog("Changes Detected",
"Do you want to save the changes? Cancel revokes the "
+ "exit request.",
mainAppPane.getScene().getWindow());

if (userChoice == DialogResult.YES) {
fileSave(null);

if (model.isChanged()) {
// cancelled out of the save, so return to the app
return false;
}
}

return userChoice == DialogResult.NO;
}

return true;
}

注意:mainAppPane 在 FXML 中被引用(在本例中使用 JavaFX Scene Builder)以允许访问场景和窗口;该对话框是从 https://github.com/4ntoine/JavaFxDialog 扩展而来的fileSave 是"file"->“保存”菜单项的事件处理程序。对于"file"->“退出”菜单项:

@FXML
private void fileExitAction(ActionEvent ev) {
if (shutdown()) {
Platform.exit();
}
}

希望这对某人有帮助!

关于window - 阻止或取消退出 JavaFX 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13727314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com