首页 > 其他分享 >如何打开新的窗口

如何打开新的窗口

时间:2023-05-25 23:11:45浏览次数:40  
标签:窗口 Scene scene 如何 newWindow new 打开 Stage

如何打开新的窗口

JavaFX 程序有一个主窗口,就是 start 函数的第一个参数。有时我们还想打开新的窗口,比如一个提示窗口。

效果如下:

image

应该怎样打开新窗口呢?

方法就是创建一个新的 Stage ,然后设置它的 Scene ,调用如 window.show() 这样的方法。

下面是一个打开一个新窗口的代码例子:

private void openWindow()
{
    VBox vBox = new VBox();

    Scene scene = new Scene(vBox, 200, 100);

    Stage newWindow = new Stage();
    newWindow.initModality(Modality.APPLICATION_MODAL); // 设置此模式,则窗口打开时,其他窗口无法操作
    newWindow.setScene(scene);
    newWindow.show();
}

一个新的窗口就是一个 Stage ,我们要为其设置一个 Scene ,Scene 设置一个根 Layout 。后面我们就可以往这个根 Layout 里面放置具体的内容了。

新打开的窗口可能需要调用 initModality 方法来设置一个模式,比如 Modality.APPLICATION_MODAL 表示窗口打开时,其他窗口无法操作。

如果不设置模式,那么默认情况其他窗口还可以操作。

问:什么时候程序会退出,是主窗口关闭时还是所有窗口关闭时

由于打开了新的窗口,因此我们的程序至少有两个窗口会同时显示,那么我们的程序在什么时候会关闭呢?

猜想可能的情况就是:

  1. 主窗口关闭时
  2. 所有窗口关闭时

经过测试发现,只有当所有窗口关闭时,程序才会退出(也就是从终端窗口看出,程序已退出)。

完整代码示例

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class OpenWindowExample extends Application
{
    private void openWindow()
    {
        VBox vBox = new VBox();

        Scene scene = new Scene(vBox, 200, 100);

        Stage newWindow = new Stage();
        newWindow.initModality(Modality.APPLICATION_MODAL); // 设置此模式,则窗口打开时,其他窗口无法操作
        newWindow.setScene(scene);
        newWindow.show();
    }

    @Override
    public void start(Stage window) throws Exception
    {
        VBox vBox = new VBox();

        Button openButton = new Button("Open Window");
        openButton.setOnAction( e -> openWindow() );
        vBox.getChildren().add(openButton);

        Scene scene = new Scene(vBox, 400, 300);

        window.setScene(scene);
        window.setTitle(this.getClass().getSimpleName());
        window.show();
    }

    public static void main(String[] args)
    {
        launch(args);
    }
}

总结

要想打开新的窗口,步骤如下:

  1. 通过 new Stage() 创建一个新的窗口
  2. 初始化 Scene 和根布局,然后调用 setScene 设置主窗口
  3. 调用 initModality 设置窗口模式,比如窗口打开时,其他窗口不能操作,就设置为 Modality.APPLICATION_MODAL
  4. 调用如 window.show() 来显示窗口

标签:窗口,Scene,scene,如何,newWindow,new,打开,Stage
From: https://www.cnblogs.com/javafx-howto/p/17433262.html

相关文章

  • 如何在ubuntu下安装Vscode并且运行C语言文件或者python文件
    要想在ubuntu中编写并运行C语言或python文件,有两种方法,第一种是直接用vim编写(在我之前的文章中有详细介绍)可以点击如下链接:如何在ubuntu安装C语言环境-代师-博客园(cnblogs.com)如何在Ubuntu中编写Python代码并运行-代师-博客园(cnblogs.com) 今天我要说的是用专......
  • 什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?
    如果你有n个缓存服务器,一个常见的负载均衡方式是使用以下的哈希方法:服务器索引=哈希(键)%N,其中N是服务器池的大小。让我们通过一个例子来说明这是如何工作的。如表5-1所示,我们有4台服务器和8个字符串键及其哈希值。为了获取存储某个键的服务器,我们执行模运算f(键)%......
  • 【Azure 媒体服务】Azure Media Service上传的视频资产,如何保证在Transfer编码后音频
    问题描述AzureMediaService上传的视频资产,如何保证在Transfer编码后音频文件和视频文件不分成两个文件?保持在一个可以直接播放的MP4文件中呢? 问题解答AzureMediaService上提供的Build-inTransform生成的资产中,音频与视频分别存储在不同的文件中。通过自定义StandardEncode......
  • 如何衡量目标检测算法的优劣
    如何衡量目标检测算法的优劣目标检测(objectdetection)问题相对于一般AI分类问题更加复杂,不仅检测出目标,输出目标的类别,还要定位出目标的位置。分类问题中的简单accuray指标已经不能反映出目标检测问题结果的准确度,而mAP(MeanAveragePrecision)就是被用来衡量目标检测算法优......
  • 【Azure 媒体服务】Azure Media Service上传的视频资产,如何保证在Transfer编码后音频
    问题描述AzureMediaService上传的视频资产,如何保证在Transfer编码后音频文件和视频文件不分成两个文件?保持在一个可以直接播放的MP4文件中呢? 问题解答AzureMediaService上提供的Build-inTransform生成的资产中,音频与视频分别存储在不同的文件中。通过自定义StandardE......
  • elementUI使用之table表格如何给行元素添加点击事件
    官方文档提供的event事件在代码中绑定事件在methods中写方法好了,这样就可以实现了。......
  • 如何将日志配置文件放入到Apollo配置中心并支持热更新
    增加监听日志文件(LoggerConfiguration.java)@ServicepublicclassLoggerConfiguration{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(LoggerConfiguration.class);privatestaticfinalStringLOGGER_TAG="logging.level.";@Autowired......
  • GET请求如何传递数组参数
    方式一可以将数组参数传递多次,springmvc会将多个同名参数自动封装成数组或者集合对象,示例如下: #请求URLhttp://127.0.0.1:8080/getUsers?name=张三&name=李四#后台接口代码@RestController@RequestMapping("/")publicclassSpringMvcController{@RequestMapping(v......
  • 多客社交圈子小程序的腾讯云实时音视频如何配置配置,适用于语音直播、交友类圈子系统un
    采用的腾讯的实时语音,经过我们对比和测试,腾讯的是最便宜的。新用户免费1万分钟,以后每1000分钟7元。第一步、腾讯云申请实时语音,实时音视频免费试用-购买指南-文档中心-腾讯云新用户免费可领取资源包1万分钟。第二步、添加应用后拿到appid和秘钥。填写在前端的配置文件里,根目录/sit......
  • Win10专业版下如何禁用Windows Defender功能?
    操作步骤如下:1、Win键+R,运行cmd,打开命令提示符;  2、打开“命令提示符(管理员)”,然后输入:regadd“Hkey_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsDefender”/v“DisableAntiSpyware”/d1/tREG_DWORD/f  3、在重启电脑之后,可以看到各种Windows......