当前位置: 首页 > news >正文

JavaFx基础学习【二】:Stage

一、介绍

窗口Stage为图中标绿部分:

实际为如下部分:

不同的操作系统表现的样式不同,以下都是以Windows操作系统为例,为了使大家更清楚Stage是那部分,直接看以下图,可能更清楚:

 

 有点潦草,但意思就是窗口框体

二、窗口Stage常用属性

·Title,窗口标题

·icon,窗口图标

·resizable,窗口是否可改变大小

·x,y,应用显示在桌面位置

·width,height,窗口宽、高

·StageStyle,窗口风格

·Modality,窗口是否模态

·event,窗口事件

·还有更多属性,这里就不一一罗列并且体验啦

三、常用属性使用及演示

1、Title,设置窗口的标题

public class App extends Application{@Overridepublic void start(Stage primaryStage) throws Exception {primaryStage.setTitle("我的应用");primaryStage.show();}public static void main(String[] args ){launch(args);}
}

效果:可以看到窗口的名称已经变为“我的应用”:

 

 

2、icon,设置窗口的图标,此处的图标为阿里巴巴矢量图标库中下载使用的,敢兴趣的小伙伴可以进行下载使用

primaryStage.getIcons().add(new Image("icon/cookie.png"));

效果:可以看到窗口的图标已经变为我们自定义的图标:

 

3、resizable,是否允许改变窗口大小

默认的情况下是true,当我们将鼠标移动至窗口边缘时,可以拖动任意改变窗口大小,我们将resizable设置为false,进行验证效果

primaryStage.setResizable(false);

效果:可以看到当我们将鼠标移动至窗口边缘时,无法拖拉进行窗口大小改变,此处请自行验证

4、x,y,用于设置窗口在桌面上显示的位置

默认情况下,当我们没有设置x,y时,窗口显示在桌面正中,当我们设置x,y时,窗口就将按照我们的设置进行显示,以下进行小狗演示

primaryStage.setX(20);
primaryStage.setY(20);

效果:可以看到当我们设置了窗口x,y之后,窗口将按照具体位置进行展示,,此处请自行验证

5、width,height,用于设置窗口大小

primaryStage.setWidth(200);
primaryStage.setHeight(200);

效果:可以看到窗口大小随着我们设置width,height进行改变:

 

6、StageStyle,用户设置窗口的样式

我们可以通过枚举类选择窗口样式,默认的窗口样式为“DECORATED”

枚举类StageStyle有以下样式:

  • DECORATED
  • UNDECORATED
  • TRANSPARENT
  • UTILITY
  • UNIFIED

我们逐一体验下以上所有样式

1)DECORATED

用纯白背景和平台装饰定义一个普通的窗口样式

primaryStage.initStyle(StageStyle.DECORATED);

效果如下:

 

2)UNDECORATED

定义一个窗口样式,背景为纯白,没有任何装饰

primaryStage.initStyle(StageStyle.UNDECORATED);

该样式有以下两种情况:

·当我们没有为Stage设置Sence时,我们在桌面上将看不到任何东西

·当我们有为Stage设置Sence时,可以看到,该窗口样式的最大特点就是,我们看不到标题、图表、隐藏按钮,全屏按钮、关闭按钮那一栏,效果如下:

 

3)TRANSPARENT

定义具有透明背景且没有装饰的窗口样式。

primaryStage.initStyle(StageStyle.TRANSPARENT);

光凭肉眼上看,与UNDECORATED样式一致,具体还需后面仔细体验才能知道:

4)UTILITY

定义具有纯白背景和用于实用程序窗口的最小平台装饰的样式。

primaryStage.initStyle(StageStyle.UTILITY);

可以看到,该样式的窗口是没有图表、隐藏按钮以及全屏按钮的,效果如下:

 

5)UNIFIED

使用平台装饰定义窗口样式,并消除客户端区域和装饰之间的边界。客户区背景与装修统一

primaryStage.initStyle(StageStyle.UNIFIED);

光凭肉眼上看,该窗口样式与DECORATED一致,具体还需后面仔细体验才能知道:

·

7、Modality,窗口是否模态

Modality有以下枚举类型:

  • NONE
  • WINDOW_MODAL
  • APPLICATION_MODAL

1)Modality之NONE,就是我们窗口默认的配置:

public class App extends Application{@Overridepublic void start(Stage primaryStage) throws Exception {// 节点nodeButton button = new Button("open new scene");// 给按钮添加点击事件,点击后打开一个新的窗口button.setOnAction(e -> {Label label = new Label("我是新窗口");BorderPane borderPane = new BorderPane(label);Scene scene = new Scene(borderPane);Stage stage = new Stage();stage.setScene(scene);stage.show();});BorderPane borderPane = new BorderPane(button);// 场景sceneScene scene = new Scene(borderPane, 300, 300);// 窗口StageprimaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args ){launch(args);}
}

以上我们没有设置Modality,你也可以添加以下配置

stage.initModality(Modality.NONE);

以上当我们点击按钮时,将会打开一个新的窗口,而且此时,我们可以操作其他窗口,效果如下:

 

可以看到,最大窗口的关闭是可以点击的

2)、Modality之APPLICATION_MODAL

当我们为新窗口添加如下配置时,我们便不能操作其他窗口了:

stage.initModality(Modality.APPLICATION_MODAL);

效果如下:

 

可以看到,最大窗口的关闭是不可以点击的

3)Modality之WINDOW_MODAL

public class App extends Application{@Overridepublic void start(Stage primaryStage) throws Exception {// 节点node1Button button = new Button("open new scene1(WINDOW_MODAL)");button.setLayoutX(20);button.setLayoutY(20);// 给按钮添加点击事件,点击后打开一个新的窗口button.setOnAction(e -> {Label label = new Label("WINDOW_MODAL");BorderPane borderPane = new BorderPane(label);Scene scene = new Scene(borderPane);Stage stage = new Stage();stage.setWidth(200);stage.setHeight(200);stage.setScene(scene);// 指定父窗口,配合WINDOW_MODAL使用stage.initOwner(primaryStage);stage.initModality(Modality.WINDOW_MODAL);stage.show();});// 节点node2Button button2 = new Button("open new scene2(NONE)");button2.setLayoutX(20);button2.setLayoutY(50);// 给按钮添加点击事件,点击后打开一个新的窗口button2.setOnAction(e -> {Label label = new Label("NONE");BorderPane borderPane = new BorderPane(label);Scene scene = new Scene(borderPane);Stage stage = new Stage();stage.setWidth(200);stage.setHeight(200);stage.setScene(scene);stage.show();});AnchorPane anchorPane = new AnchorPane();anchorPane.getChildren().add(button);anchorPane.getChildren().add(button2);// 场景sceneScene scene = new Scene(anchorPane, 300, 300);// 窗口StageprimaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args ){launch(args);}
}

当我们点击两次NONE按钮,生成两个NONE模态生效的窗口,再点击一次WINDOW_MODAL按钮,发现,由于WINDOW_MODAL的父窗口就是我们一开始看到的窗口,该窗口是不能够点击使用的,而两个NONE窗口是能够正常使用的,以上就是WINDOW_MODAL模态类型的使用,效果如下:

可以看到,NONE模态窗口是可以操作的,WINDOW_MODAL也可以,但是最大窗口不行

 

8、event,事件

如关闭窗口事件

//Platform.setImplicitExit(false);
primaryStage.setOnCloseRequest(event -> {event.consume();Alert alert = new Alert(Alert.AlertType.CONFIRMATION);alert.setTitle("退出程序");alert.setHeaderText(null);alert.setContentText("是否退出程序?");Optional<ButtonType> result = alert.showAndWait();if(result.get().equals(ButtonType.OK)){Platform.exit();}
});

显示效果如下:

四、其他章节

 待补充

http://www.lryc.cn/news/123988.html

相关文章:

  • C语言——动态内存函数(malloc、calloc、realloc、free)
  • Redis数据结构——Redis简单动态字符串SDS
  • 【计算机网络】TCP协议超详细讲解
  • Salesforce特别元数据部署技巧
  • [前端系列第2弹]CSS入门教程:从零开始学习Web页面的样式和布局
  • 非计算机科班如何丝滑转码?
  • 亿发创新中医药信息化解决方案,自动化煎煮+调剂,打造智能中药房
  • Vulnhub: MoneyBox: 1靶机
  • [国产MCU]-BL602开发实例-LCD1602 I2C驱动
  • AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理
  • URLSearchParams:JavaScript中的URL查询参数处理工具
  • 1.4 数据库管理与优化
  • T113-S3 Tina-Linux -- 2.开发板使用
  • Django-配置邮箱功能(一):使用django自带的发送邮件功能
  • JS实现树形结构、一维数组以及map之间的转换
  • Vue中自定义.js变量
  • 基于深度信念神经网络+长短期神经网络的降雨量预测,基于dbn-lstm的降雨量预测,dbn原理,lstm原理
  • SyntaxError: Cannot use import statement outside a module
  • 为什么要做数据可视化系统
  • Java项目作业~ 通过html+Servlet+MyBatis,完成站点信息的添加功能
  • 基于 Arduino 编写 ESP32 BLE Server 例程
  • Mac环境变量配置
  • 使用FTP文件传输协议的潜在风险
  • Jtti:windows虚拟内存最小值太低如何解决
  • 基于微服务+Java+Spring Cloud +Vue+UniApp +MySql实现的智慧工地云平台源码
  • Unity框架学习--4 Mono管理器
  • Unity zSpace 开发
  • SQL注入是什么?如何防范?
  • Spring kafka源码分析——消息是如何消费的
  • 汽车电子的发展对国产32位MCU的影响