JavaFx基础学习【二】:Stage

news2024/12/22 19:30:16

一、介绍

窗口Stage为图中标绿部分:

实际为如下部分:

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

 

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

二、窗口Stage常用属性

·Title,窗口标题

·icon,窗口图标

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

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

·width,height,窗口宽、高

·StageStyle,窗口风格

·Modality,窗口是否模态

·event,窗口事件

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

三、常用属性使用及演示

1、Title,设置窗口的标题

public class App extends Application{

    @Override
    public 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{

    @Override
    public void start(Stage primaryStage) throws Exception {
        // 节点node
        Button 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);

        // 场景scene
        Scene scene = new Scene(borderPane, 300, 300);

        // 窗口Stage
        primaryStage.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{

    @Override
    public void start(Stage primaryStage) throws Exception {
        // 节点node1
        Button 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();
        });

        // 节点node2
        Button 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);


        // 场景scene
        Scene scene = new Scene(anchorPane, 300, 300);

        // 窗口Stage
        primaryStage.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.coloradmin.cn/o/877430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MachineLearningWu_15/P70-P71_AdamAndConv

x.1 算法参数更新 我们使用梯度下降算法来自动更新参数&#xff0c;但是由于学习率的不好选择性&#xff0c;我们有时候会下降地很快&#xff0c;有时候下降地很慢&#xff0c;我们期望有一种方式能够自动调整学习率的变化&#xff0c;这里引入Adaptive Moment Estimation/Ada…

City Walk带动茶饮品牌售1200万,媒介盒子带你探究奥秘

年轻人生活趋势又出现了一个新鲜词——City Walk&#xff0c;简单来说&#xff0c;City Walk就是没有目的地&#xff0c;没有目标&#xff0c;只是出行&#xff0c;填充自己的生活。 其实这个词源于gap year&#xff0c;而这个说法一直是国外的一些毕业生&#xff0c;大多会在…

解决方案 | 法大大加速医疗器械行业创新升级

科技的不断进步&#xff0c;带动医疗器械产品不断创新升级。数字化、智能化的技术也开始广泛应用在医疗器械行业中。行业的蓬勃发展&#xff0c;进一步驱动了医疗器械行业规范化管理政策的出台&#xff0c;2019年&#xff0c;《医疗器械产品注册管理办法》&#xff08;2019&…

Mongodb (四十一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 相关概念 1.2 特性 二、应用场景 三、安装 四、目录结构 五、默认数据库 六、 数据库操作 6.1 库操作 6.2 文档操作 七、MongoDB数据库备份 7.1 备…

Mybatis-Plus(四 )--其他功能和ActiveRecord和MybatisX和AutoGenerator

一.其他功能 1.自动填充 有些时候我们可能会在插入或者更新数据时&#xff0c;希望有些字段可以自动填充数据&#xff0c;比如密码&#xff0c;version等。 【1】添加TableField注解 TableField(fillFieldFill.INSERT)//插入数据时进行填充 private String password; 除了…

【机密计算实践】OPEN Enclave SDK 安装与构建

机密计算是基于硬件支持的可信执行环境的&#xff0c;比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE&#xff0c;不过这些异构的 TEE 之间差异还是蛮大的&#xff0c;所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK&#xff0c;这就是本文将要提到…

我学会这些车载技术,是不是就可以进【小米】车企?

作者&#xff1a;阿刁 随着智能化和电动化的发展&#xff0c;车载开发领域的前景非常广阔。许多手机厂商也纷纷加入进来&#xff0c;华为、小米等手机巨头也相继推出新能源汽车。所以在未来&#xff0c;车载系统将成为汽车的核心部分&#xff0c;涵盖车辆的控制、信息娱乐、智能…

“先锋龙颜美学”,比亚迪宋L 完成工信部申报,单双电机正式上市

根据工信部最新发布的《道路机动车辆生产企业及产品公告》&#xff08;第 374 批&#xff09;&#xff0c;我们得知比亚迪汽车公司的新款车型宋 L 已经顺利完成申报&#xff0c;并成功获得核准。这款车型将会有两个版本&#xff0c;分别是单电机和双电机版本。 此外&#xff0c…

Redis——String类型详解

概述 Redis中的字符串直接按照二进制的数据存储&#xff0c;不会有任何的编码转换&#xff0c;因此存放什么样&#xff0c;取出来的时候就什么样。而MySQL默认的字符集是拉丁文&#xff0c;如果插入中文就会失败 Redis中的字符串类型不仅可以存放文本数据&#xff0c;还可以存…

GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会)

GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会) Glove子词嵌入上游、下游任务监督学习、无监督学习BERTGlove 子词嵌入 上游、下游任务 监督学习、无监督学习 BERT

强制Edge或Chrome使用独立显卡【WIN10】

现代浏览器通常将图形密集型任务卸载到 GPU&#xff0c;以改善你的网页浏览体验&#xff0c;从而释放 CPU 资源用于其他任务。 如果你的系统有多个 GPU&#xff0c;Windows 10 可以自动决定最适合 Microsoft Edge 自动使用的 GPU&#xff0c;但这并不一定意味着最强大的 GPU。 …

8.14 刷题【7道】

二叉树 1. 树中两个结点的最低公共祖先 原题链接 方法一&#xff1a;公共路径 分别找出根节点到两个节点的路径&#xff0c;则最后一个公共节点就是最低公共祖先了。 时间复杂度分析&#xff1a;需要在树中查找节点&#xff0c;复杂度为O(n) /*** Definition for a binary…

CUDA、cuDNN以及Pytorch介绍

文章目录 前言一、CUDA二、cuDNN三、Pytorch 前言 在讲解cuda和cuDNN之前&#xff0c;我们首先来了解一下英伟达&#xff08;NVIDA&#xff09;公司。 NVIDIA是一家全球领先的计算机技术公司&#xff0c;专注于图形处理器&#xff08;GPU&#xff09;和人工智能&#xff08;…

买机票系统---(java实现)

/* * 案例 * 卖机票 * 需求&#xff1a;机票价格按照淡季和旺季&#xff0c;头等舱和经济舱收费&#xff0c;输入机票原价&#xff0c;月份和头等舱或经济舱 * 旺季&#xff08;5-10月&#xff09;&#xff1a;头等舱9折&#xff0c;经济舱8.5折 * 淡季&#xff08;11-来年4月&…

小目标检测(5)——有线硬触发和有线软触发架构学习

文章目录 引言正文PLC介绍有线硬触发有线软触发硬件接口 总结引用 引言 之前花了很多时间也就是仅仅看懂了基本代码,最近和老师交流之后,发现还有很多东西都需要弄.最终的灯检机,并不是直接接上计算机就使用的,并不是单纯通过计算机控制的,还有一个叫做PLC(可编程逻辑控制器),…

Python自动化实战之使用Selenium进行Web自动化详解

概要 为了完成一项重复的任务&#xff0c;你需要在网站上进行大量的点击和操作&#xff0c;每次都要浪费大量的时间和精力。Python的Selenium库就可以自动化完成这些任务。 在本篇文章中&#xff0c;我们将会介绍如何使用Python的Selenium库进行Web自动化&#xff0c;以及如何…

免费敏捷工具做敏捷需求管理

传统的瀑布工作模式使用详细的需求说明书来表达需求&#xff0c;需求人员负责做需求调研&#xff0c;根据调研情况编制详细的需求说明书&#xff0c;进行需求评审&#xff0c;评审之后签字确认交给研发团队设计开发。在这样的环境下&#xff0c;需求文档是信息传递的主体&#…

vscode自带的代码诊断工具在为 c++17 的特性报错,如何取消这些报错

ctrlshiftP 打开设置界面&#xff0c;找到这个项 调整为 c17 即可

ssh做端口转发

问题 主机1能访问外网&#xff0c;主机2 不能访问外网外部主机想要访问主机2 解决 在主机1上做本地端口转发。可以用ssh来做本地端口转发(转发到远端)。 方法&#xff1a; 在&#xff08;本地&#xff09;主机1上执行 ssh -C -f -N -g -L 10.0.8.3:18888:10.0.8.4:8888 li…

【深度学习】PyTorch快速入门

【深度学习】学习PyTorch基础 介绍PyTorch 深度学习框架是一种软件工具&#xff0c;旨在简化和加速构建、训练和部署深度学习模型的过程。深度学习框架提供了一系列的函数、类和工具&#xff0c;用于定义、优化和执行各种深度神经网络模型。这些框架帮助研究人员和开发人员专注…