我是靠谱客的博主 无私发卡,这篇文章主要介绍利用JavaFx开发RIA桌面应用-Stage窗口关闭监听,并弹出确认提示框1 场景说明2 实现方式3 补充说明,现在分享给大家,希望可以做个参考。

转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53737969,建议读者阅读原文,确保获得完整的信息

1 场景说明

       JavaFx开发的桌面客户端,如果没自定义标题栏,使用其默认的风格(即包含最小化、最大化、关闭图标),其中往往需要调整的是关闭方式,不希望是直接关闭,而是弹出确认提示框,如下图:

这里写图片描述

2 实现方式

       这里给大家介绍一种比较简洁的实现方式,还是沿用JavaFx默认的标题栏,只不过在处理环节中加入其它元素。

       总体分为3步:

  • 第一步:构建弹出窗口模版,即窗口类。
  • 第二步:创建窗口关闭处理事件,即关闭按钮点击后,如何处理逻辑。
  • 第三步:窗口关闭按钮添加监听器。

       第一步,创建弹出窗口类,显示效果如上图中的小窗口,至于风格因人而异。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class WindowsClosePage { private static final Logger logger = Logger.getLogger(WindowsClosePage.class); private Stage dialogStage; private Stage primaryStage; public WindowsClosePage(Stage stage) { MyStyleButton myStyleButton = MyStyleButton.getInstance(); WindowsPositionObject windowsPosition = WindowsPositionObject.getInstance(); double width = windowsPosition.getLength()/2; double height = windowsPosition.getWidth()/2; dialogStage = new Stage(); primaryStage = stage; dialogStage.initOwner(primaryStage); dialogStage.initModality(Modality.WINDOW_MODAL); dialogStage.setWidth(width); dialogStage.setHeight(height); dialogStage.setX(windowsPosition.getX() + width/2); dialogStage.setY(windowsPosition.getY() + height/2); dialogStage.setResizable(false); BorderPane borderPaneLayout = new BorderPane(); borderPaneLayout.getStyleClass().add("root"); Button confirm = myStyleButton.getShadowButton("是(Y)", ImageUtil.getImageView("image/ok.png")); Button cancel = myStyleButton.getShadowButton("否(N)", ImageUtil.getImageView("image/close.png")); confirm.setOnMouseClicked(new EventHandler<MouseEvent>() { public void handle(MouseEvent event) { dialogStage.close(); primaryStage.close(); } }); cancel.setOnMouseClicked(new EventHandler<MouseEvent>() { public void handle(MouseEvent event) { dialogStage.close(); } }); HBox hBox = new HBox(); hBox.setSpacing(10); hBox.getChildren().addAll(confirm,cancel); hBox.setAlignment(Pos.CENTER); VBox vBox = new VBox(); Text text = new Text(Constant.CLOSE_PAGE_TITLE); vBox.setSpacing(40); vBox.getChildren().addAll(text,hBox); vBox.setAlignment(Pos.CENTER); borderPaneLayout.setCenter(vBox); Scene scene = new Scene(borderPaneLayout); dialogStage.setTitle(Constant.SOFTWARE_TITLE); dialogStage.setScene(scene); logger.info("WindowsClosePage UI"); } public void activateProgressBar() { dialogStage.show(); } }

       第二步,创建窗口关闭监听事件类,此事件类主要就是实现窗口关闭按钮被电击后的连串事件。看见方法中使用了event.consume()方法,然后再调出了弹出小窗口。

复制代码
1
2
3
4
5
6
7
8
9
10
11
public class WindowsCloseEvent implements EventHandler<WindowEvent> { private Stage stage; public WindowsCloseEvent(Stage stage){ this.stage = stage; } public void handle(WindowEvent event) { event.consume(); WindowsClosePage windowsClosePage = new WindowsClosePage(stage); windowsClosePage.activateProgressBar(); } }

       如果要阻止窗口在按下关闭按钮后退出,需要利用setOnCloseRequest,同时在handler函数中需要调用event.consume()来阻止事件进一步传递,这样才能真正阻止Window Close事件的默认处理,可以通过API来了解:

这里写图片描述

       其中属性描述中有明确的说明,可以通过consuming来阻止窗口被关闭,详见:http://docs.oracle.com/javafx/2/api/javafx/stage/Window.html#onCloseRequestProperty

第三步,在程序入口类的start函数中添加stage关闭监听。

复制代码
1
2
3
4
5
public void start(Stage primaryStage){ ... primaryStage.setOnCloseRequest(new WindowsCloseEvent(primaryStage)); } ...

3 补充说明

3.1. stage.hide() 与 stage.close() 等价。
详见http://docs.oracle.com/javafx/2/api/javafx/stage/Stage.html#close()

3.2. 如果要阻止Fx窗口在按下关闭按钮后退出,的确需要setOnCloseRequest,可是在handler函数中需要调用event.consume()来阻止事件进一步传递,这样才能真正阻止Window Close事件的默认处理,如果不加这个方法,窗口是会直接关闭的。
详见http://docs.oracle.com/javafx/2/api/javafx/stage/Window.html#onCloseRequestProperty

3.3. 默认情况下,JavaFx运行时会在最后一个stage close(或hide)后自动关闭,即自动调用Application.stop(),除非通过Platform.setImplicitExit(false)取消这个默认行为。这样,即使所有Fx窗口关闭(或隐藏),Fx运行时还在正常运行,可以再次显示原来的窗口或打开新的窗口。
详见http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#setImplicitExit(boolean)

相关文章:

  • 《 利用JavaFx开发RIA桌面应用-Stage窗口关闭监听,并弹出确认提示框》
  • 《 利用JavaFx开发RIA桌面应用-Windows任务栏图标闪烁效果》
  • 《 利用JavaFx开发RIA桌面应用-TableView操作》
  • 《 利用JavaFx开发RIA桌面应用-Clipboard剪贴板操作》
  • 《利用JavaFx开发RIA桌面应用-TextField替换PasswordField做密码框》
  • 《利用JavaFx开发RIA桌面应用-半透明界面设计》
  • 《利用JavaFx开发RIA桌面应用-加载等待界面设计》
  • 《利用JavaFx开发RIA桌面应用-文件拖拽》
  • 《利用JavaFx开发RIA桌面应用-改变stage的标题栏的图标》
  • 《利用JavaFx开发RIA桌面应用-事件监听》
  • 《利用JavaFx开发RIA桌面应用-ComboBox组合编辑框水平增长》
  • 《利用JavaFx开发RIA桌面应用-布局说明》
  • 《利用JavaFx开发RIA桌面应用-在线资料》

最后

以上就是无私发卡最近收集整理的关于利用JavaFx开发RIA桌面应用-Stage窗口关闭监听,并弹出确认提示框1 场景说明2 实现方式3 补充说明的全部内容,更多相关利用JavaFx开发RIA桌面应用-Stage窗口关闭监听,并弹出确认提示框1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部