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();}
});
显示效果如下:
四、其他章节
待补充
相关文章:

JavaFx基础学习【二】:Stage
一、介绍 窗口Stage为图中标绿部分: 实际为如下部分: 不同的操作系统表现的样式不同,以下都是以Windows操作系统为例,为了使大家更清楚Stage是那部分,直接看以下图,可能更清楚: 有点潦草&…...

C语言——动态内存函数(malloc、calloc、realloc、free)
了解动态内存函数 前言:一、malloc函数二、calloc函数三、realloc函数四、free函数 前言: 在C语言中,动态内存函数是块重要的知识点。以往,我们开辟空间都是固定得,数组编译结束后就不能继续给它开辟空间了࿰…...

Redis数据结构——Redis简单动态字符串SDS
定义 众所周知,Redis是由C语言写的。 对于字符串类型的数据存储,Redis并没有直接使用C语言中的字符串。 而是自己构建了一个结构体,叫做“简单动态字符串”,简称SDS,比C语言中的字符串更加灵活。 SDS的结构体是这样的…...

【计算机网络】TCP协议超详细讲解
文章目录 1. TCP简介2. TCP和UDP的区别3. TCP的报文格式4. 确认应答机制5. 超时重传6. 三次握手7. 为什么两次握手不行?8. 四次挥手9. 滑动窗口10. 流量控制11. 拥塞控制12. 延时应答13. 捎带应答14. 面向字节流15. TCP的连接异常处理 1. TCP简介 TCP协议广泛应用于可靠性要求…...
Salesforce特别元数据部署技巧
标准的picklist字段部署 <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <Package xmlns"http://soap.sforce.com/2006/04/metadata"><types><members>Opportunity.StageName</members><…...
[前端系列第2弹]CSS入门教程:从零开始学习Web页面的样式和布局
在这篇文章中,我将介绍CSS的基本概念、语法、选择器、属性和值,以及如何使用它们来定义Web页面的外观和布局。还将给一些简单而实用的例子,可以跟着我一步一步地编写自己的CSS样式表。 目录 一、什么是CSS 二、CSS的语法 三、CSS的选择器 …...

非计算机科班如何丝滑转码?
转码,也就转行为程序员,已成为当今数字化时代的一种重要技能。随着科技的发展,越来越多的人开始意识到掌握编程技能的重要性,而非计算机科班出身的朋友们,想要丝滑转码,也许可以从以下几个方面入手。 一、明…...

亿发创新中医药信息化解决方案,自动化煎煮+调剂,打造智能中药房
传统中医药行业逐步复兴,同时互联网科技和人工智能等信息科技助力中医药行业逐步实现数字化转型。利用互联网、物联网、大数据等科技,实现现代科学与传统中医药的结合,提供智能配方颗粒调配系统、中药自动化调剂系统、中药煎配智能管理系统、…...

Vulnhub: MoneyBox: 1靶机
kali:192.168.111.111 靶机:192.168.111.194 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.194 ftp匿名登录发现trytofind.jpg 目录爆破发现blogs目录 gobuster dir -u http://192.168.111.194 -w /usr/share/word…...

[国产MCU]-BL602开发实例-LCD1602 I2C驱动
LCD1602 I2C驱动 文章目录 LCD1602 I2C驱动1、LCD1602/LCD2004介绍2、硬件准备3、驱动实现本文将详细介绍如何在K210中驱动LCD1602/LCD2004 I2C显示屏。 1、LCD1602/LCD2004介绍 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱…...

AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理
大家好,我是风雨无阻。 本文适合人群: 想要了解AI绘图基本原理的朋友。 对Stable Diffusion AI绘图感兴趣的朋友。 本期内容: Stable Diffusion 能做什么 什么是扩散模型 扩散模型实现原理 Stable Diffusion 潜扩散模型 Stable Diffu…...

URLSearchParams:JavaScript中的URL查询参数处理工具
文章目录 导言:一、URLSearchParams的来历二、URLSearchParams的作用三、URLSearchParams的方法和属性四、使用示例五、注意事项六、结论参考资料 导言: 在Web开发中,处理URL查询参数是一项常见的任务。为了简化这一过程,JavaScr…...
1.4 数据库管理与优化
数据库管理与优化 文章目录 数据库管理与优化1. 数据库概述1.1 数据库的定义和作用1.2 数据库管理系统(DBMS) 2. 数据库模型2.1 关系型数据库**2.2 非关系型数据库 3. 数据库设计3.1 数据库设计原则3.2 数据库设计步骤 4. 数据库优化4.1 数据库性能优化4…...

T113-S3 Tina-Linux -- 2.开发板使用
1. 硬件环境 1.1 开发板 型号:100ASK_T113-PRO Base V1.1(韦东山)配置:CPU:T113-S3,RAM:128MB,ROM:128MB 2. 各模块使用 2.1 wifi wifi模组型号:XR829…...

Django-配置邮箱功能(一):使用django自带的发送邮件功能
一、获取邮箱授权码 以QQ邮箱为例子: 1、进入到设置,找到账户 2、开启POP3等服务,点击管理服务 3、进入管理服务,生成授权码 4、按照要求发送短信就可以了 5、将授权码复制保存,离开界面就看不到了 二、django项目中…...

JS实现树形结构、一维数组以及map之间的转换
const treeData[ {id:1, name:中国, children:[ {id:11,name:河南省,children:[{id:111,name:南阳市,children:[{id:1111,name:淅川县,children:null}]},{id:112,name:郑州市,children:[{id:1121,name:中牟县,children:null}]}] }, {id:22,name:广东省,children:[{id:221,name:…...
Vue中自定义.js变量
1、定义.js文件 order.js文件内容: // 订单是否报账 const EXPENESS_STATUS_NO0; const EXPENESS_STATUS_YES1; // 状态 0-未发货 1-发货 2-确认收获 const STATUS_NO0; const STATUS_SEND1; const STATUS_DELIVERY2; // 如何不加这个,vue中引…...

基于深度信念神经网络+长短期神经网络的降雨量预测,基于dbn-lstm的降雨量预测,dbn原理,lstm原理
目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) LSTM原理 DBN-LSTM的降雨量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,通过dbn进行无监督学习提取特征,然后长短期神经…...

SyntaxError: Cannot use import statement outside a module
node环境运行报错: 解决步骤: 1. npm init -y 2. 在 package.json 文件中加入一条:"type": "module", 3. 保存后再执行即可 附:最好是不要在node用import,否则需要上次配置 建议1:用re…...
为什么要做数据可视化系统
数据可视化系统在当今数字时代发挥着重要的作用,成为许多组织和企业的不可或缺的工具。随着信息爆炸式增长和数据处理的需求不断增加,数据可视化系统帮助人们更好地理解和分析数据,为决策提供重要支持。数聚股份将详细介绍为什么要做数据可视…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...