概述
转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53737969,建议读者阅读原文,确保获得完整的信息
1 场景说明
JavaFx开发的桌面客户端,如果没自定义标题栏,使用其默认的风格(即包含最小化、最大化、关闭图标),其中往往需要调整的是关闭方式,不希望是直接关闭,而是弹出确认提示框,如下图:
2 实现方式
这里给大家介绍一种比较简洁的实现方式,还是沿用JavaFx默认的标题栏,只不过在处理环节中加入其它元素。
总体分为3步:
- 第一步:构建弹出窗口模版,即窗口类。
- 第二步:创建窗口关闭处理事件,即关闭按钮点击后,如何处理逻辑。
- 第三步:窗口关闭按钮添加监听器。
第一步,创建弹出窗口类,显示效果如上图中的小窗口,至于风格因人而异。
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()方法,然后再调出了弹出小窗口。
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关闭监听。
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 场景说明2 实现方式3 补充说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复