gpt4 book ai didi

javafx - 如何以编程方式强制JavaFX应用程序关闭请求

转载 作者:行者123 更新时间:2023-12-04 09:14:36 25 4
gpt4 key购买 nike

关闭应用程序时,我一直在使用javafx.stage.Window.setOnCloseRequest(EventHandler<WindowEvent> arg0)运行一些代码。现在,我想在代码中强制执行关闭请求,因此将运行相同的算法。

我尝试stage.close()Platform.exit()System.exit()无济于事;它们都会直接关闭应用程序。是否有一种流畅的方法可以执行此操作而无需按Robot键并按Alt + F4键? (我也可以想象用算法创建一个函数,然后在setOnCloseRequest()以及其他我可能需要的地方调用它)。

最佳答案

您可以从阶段获取事件处理程序并调用它。

stage.getOnCloseRequest()
.handle(
new WindowEvent(
stage,
WindowEvent.WINDOW_CLOSE_REQUEST
)
)


但是可能您想做的不仅是调用您的自定义关闭请求处理程序函数,而是触发一个关闭请求事件,该事件将运行您的处理程序以及该窗口的任何其他关闭事件处理程序,(因此,默认情况下,它还将关闭窗口)。

stage.fireEvent(
new WindowEvent(
stage,
WindowEvent.WINDOW_CLOSE_REQUEST
)
)


示例应用

运行以下示例(Java 8)以查看两种方法的行为之间的区别:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class CloseMonitor extends Application {
@Override
public void start(Stage stage) {
stage.setOnCloseRequest(
event -> System.out.println("Close Requested")
);

Button handleClose = new Button("Handle Close Request");
handleClose.setOnAction(
event -> stage.getOnCloseRequest()
.handle(
new WindowEvent(
stage,
WindowEvent.WINDOW_CLOSE_REQUEST
)
)
);
handleClose.setMaxWidth(Double.MAX_VALUE);

Button fireClose = new Button("Fire Close Request");
fireClose.setOnAction(
event -> stage.fireEvent(
new WindowEvent(
stage,
WindowEvent.WINDOW_CLOSE_REQUEST
)
)
);
fireClose.setMaxWidth(Double.MAX_VALUE);

stage.setScene(
new Scene(
new VBox(
10,
handleClose,
fireClose
)
)
);
stage.show();
stage.sizeToScene();
}

public static void main(String[] args) {
launch(args);
}
}

关于javafx - 如何以编程方式强制JavaFX应用程序关闭请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24483686/

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