问题描述:使用原生javaFX风格的界面的时候setOnCloseRequest方法可以正常执行,但是在JFoenxi风格下面该方法不执行。
问题分析:从以下语句可以看出: JFXDecorator decorator = new JFXDecorator(stage, container.getView()); decorator.setCustomMaximize(true); Scene scene = new Scene(decorator, 800, 800); 这里的Scene是通过JFXDecorator来初始化的,在JFXDecorator中对stage的关闭做了封装,当点击关闭按钮的时候,实际执行的是: private ObjectProperty<Runnable> onCloseButtonAction = new SimpleObjectProperty<>(() -> { Platform.exit(); }); 这里可以看出,直接退出了平台,不能再对setOnCloseRequest方法进行扩展了。
解决办法:改变JFXDecorator中的关闭平台方法,如下: private ObjectProperty<Runnable> onCloseButtonAction = new SimpleObjectProperty<>(() -> { // Platform.exit(); System.out.println("hello world!!!"); // primaryStage.hide(); }); 这样,当点击系统的关闭按钮的时候,就可以在关闭请求里面执行其它方法了。
setOnCloseRequest 方法原型: stage.setOnCloseRequest((e) -> { System.out.println("don't close me!"); e.consume(); });