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…...
为什么要做数据可视化系统
数据可视化系统在当今数字时代发挥着重要的作用,成为许多组织和企业的不可或缺的工具。随着信息爆炸式增长和数据处理的需求不断增加,数据可视化系统帮助人们更好地理解和分析数据,为决策提供重要支持。数聚股份将详细介绍为什么要做数据可视…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...
docker容器互联
1.docker可以通过网路访问 2.docker允许映射容器内应用的服务端口到本地宿主主机 3.互联机制实现多个容器间通过容器名来快速访问 一 、端口映射实现容器访问 1.从外部访问容器应用 我们先把之前的删掉吧(如果不删的话,容器就提不起来,因…...
