JavaFX的对话框

news2024/12/21 19:48:51

JavaFX的对话框主要分为提示对话框(Alert)和文件对话框两类,其中提示对话框又分作消息对话框、警告对话框、错误对话框、确认对话框四种。这四种对话框都使用Alert控件表达,并通过对话框类型加以区分。

  • AlertType.NONE表示警报中设置任何默认属性。
  • AlertType.INFORMATION:表示消息对话框。
  • AlertType.WARNIN:表示警告对话框。
  • AlertType.ERROR:表示错误对话框。
  • AlertType.CONFIRMATION:表示确认对话框。

该类的构造函数是:

  • Alert(Alert.AlertType a):创建具有指定警报类型的新警报。
  • Alert(Alert.AlertType a, String c, ButtonType… b):创建具有指定警报类型,内容和按钮类型的新警报。

警报包含3个部分:

  • 标头
  • 内容文字
  • 确认按钮

另外,Alert提示对话框还提供了下列方法来操作对话框: 

方法说明
getAlertType设置指定的警报类型
setAlertType为警报设置指定的警报类型
getButtonTypes返回此Alert实例中当前设置的所有ButtonType实例的ObservableList。
setContentText设置警报的上下文文本
getContentText返回警报的内容文本。
setTitle设置对话框的标题
setHeaderText设置对话框的头部文本
setContentText设置对话框的内容文本
show显示对话框
showAndWait显示对话框,并等待按钮返回。该方法的返回类型是Optional<ButtonType>,它用来描述确认对话框选择的是确定按钮还是取消按钮

消息对话框:

// 创建一个按钮
Button btn1 = new Button("消息对话框"); 

// 设置按钮的单击事件
btn1.setOnAction(new EventHandler<ActionEvent>() {

    // 处理单击事件
    @Override
    public void handle(ActionEvent arg0) { 
        // 创建一个消息对话框
        Alert alert = new Alert(Alert.AlertType.INFORMATION);

        // 设置对话框的头部文本
        alert.setHeaderText("今日天气"); 
        // 设置对话框的内容文本
        alert.setContentText("今天白天晴转多云,北转南风2、3间4级,最高气温28℃;夜间多云转阴,南风2级左右,最低气温16℃。");

        // 显示对话框
        alert.show(); 
    }
});

// 往流式窗格上添加按钮
flowPane.getChildren().add(btn1);

 

警告对话框:

// 创建一个按钮
Button btn2 = new Button("警告对话框");

// 设置按钮的单击事件
btn2.setOnAction(new EventHandler<ActionEvent>() {

    // 处理单击事件
    @Override
    public void handle(ActionEvent arg0) {
        // 创建一个警告对话框
        Alert alert = new Alert(Alert.AlertType.WARNING);

        // 设置对话框的头部文本
        alert.setHeaderText("编译警告");

        // 设置对话框的内容文本
        alert.setContentText("您在本代码的第60行未初始化变量,可能导致空指针异常。");
        
        // 显示对话框
        alert.show();
    }
});

// 往流式窗格上添加按钮
flowPane.getChildren().add(btn2);

错误对话框:

// 创建一个按钮
Button btn3 = new Button("错误对话框"); 

// 设置按钮的单击事件
btn3.setOnAction(new EventHandler<ActionEvent>() {

    // 处理单击事件
    @Override
    public void handle(ActionEvent arg0) { 
        // 创建一个错误对话框
        Alert alert = new Alert(Alert.AlertType.ERROR); 

        // 设置对话框的头部文本
        alert.setHeaderText("致命错误"); 

        // 设置对话框的内容文本
        alert.setContentText("系统即将关机,请赶紧保存文件。");

        // 显示对话框
        alert.show(); 
    }
});

// 往流式窗格上添加按钮
flowPane.getChildren().add(btn3); 

 

确认对话框,它使用showAndWait方法替换了show方法:

// 创建一个按钮
Button btn4 = new Button("确认对话框");

// 设置按钮的单击事件
btn4.setOnAction(new EventHandler<ActionEvent>() { 

    // 处理单击事件
    @Override
    public void handle(ActionEvent arg0) {
        // 创建一个确认对话框
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);

        // 设置对话框的头部文本
        alert.setHeaderText("温馨提示"); 

        // 设置对话框的内容文本
        alert.setContentText("尊敬的用户,你真的要卸载我吗?");

        // 显示对话框,并等待按钮返回
        Optional<ButtonType> buttonType = alert.showAndWait();

        // 判断返回的按钮类型是确定还是取消,再据此分别进一步处理
        if (buttonType.get().getButtonData().equals(ButtonBar.ButtonData.OK_DONE)) { // 单击了确定按钮OK_DONE
            label.setText("您选择了“确定”按钮。虽然依依不舍,但是只能离开了");
        } else { // 单击了取消按钮CANCEL_CLOSE
            label.setText("您选择了“取消”按钮。让我再陪你三百六十五个日夜");
        }
    }
});

// 往流式窗格上添加按钮
flowPane.getChildren().add(btn4);

 

各自单击确认对话框上的确定按钮和取消按钮,对话框消失后的窗口界面分别如下面两张图所示:

文件对话框FileChooser,细分为文件打开对话框与文件保存对话框两种,FileChooser的常见方法说明如下:

方法说明
setTitle设置文件对话框的标题
setInitialDirectory设置文件对话框的初始目录
getExtensionFilters获得文件对话框的扩展过滤器。调用过滤器的add方法或者addAll方法可以添加新的文件类型过滤器
showOpenDialog显示文件打开对话框。该方法返回一个选中的文件对象
showOpenMultipleDialog显示文件打开对话框,且该对话框支持同时选择多个文件。该方法返回一个选中的文件清单
showSaveDialog显示文件保存对话框。该方法返回一个待保存的文件对象,文件可能存在也可能不存在

 文件对话框的运用场景,现在准备打开某张图片,以便对该图片进行加工。鉴于图片文件包含jpg、gif、bmp、png等多种格式,在创建文件类型过滤器时得添加主要的几种图片扩展名,下面便是打开图片的对话框调用代码例子:

Button btn1 = new Button("文件打开对话框"); // 创建一个按钮
btn1.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件

    @Override
    public void handle(ActionEvent arg0) { // 处理单击事件
        FileChooser chooser = new FileChooser(); // 创建一个文件对话框
        chooser.setTitle("打开文件"); // 设置文件对话框的标题
        chooser.setInitialDirectory(new File("E:\\")); // 设置文件对话框的初始目录
        // 给文件对话框添加多个文件类型的过滤器
        chooser.getExtensionFilters().addAll(
                new FileChooser.ExtensionFilter("所有文件", "*.*"),
                new FileChooser.ExtensionFilter("所有图片", "*.jpg", "*.gif", "*.bmp", "*.png"));
        // 显示文件打开对话框,且该对话框支持同时选择多个文件
        File file = chooser.showOpenDialog(stage); // 显示文件打开对话框
        if (file == null) { // 文件对象为空,表示没有选择任何文件
            label.setText("未选择任何文件");
        } else { // 文件对象非空,表示选择了某个文件
            label.setText("准备打开的文件路径是:"+file.getAbsolutePath());
        }
    }
});

flowPane.getChildren().add(btn1); // 往流式窗格上添加按钮

单击按钮后弹出的对话框如下图所示:

文件对话框中选择某个目录下的某个图片文件,此时对话框界面如下图所示:

单击确定按钮,回到主程序的窗口界面如下图所示,可见主程序成功获取到了该文件的完整路径:

文件保存对话框的使用过程,这次期望将一段文字保存到文本文件,那么具体实现的对话框代码如下所示:

Button btn2 = new Button("文件保存对话框"); // 创建一个按钮

btn2.setOnAction(new EventHandler<ActionEvent>() { // 设置按钮的单击事件

    @Override
    public void handle(ActionEvent arg0) { // 处理单击事件
        FileChooser chooser = new FileChooser(); // 创建一个文件对话框
        chooser.setTitle("保存文件"); // 设置文件对话框的标题
        chooser.setInitialDirectory(new File("E:\\")); // 设置文件对话框的初始目录
        // 创建一个文件类型过滤器
        FileChooser.ExtensionFilter filter = new FileChooser.ExtensionFilter("文本文件(*.txt)", "*.txt");
        // 给文件对话框添加文件类型过滤器
        chooser.getExtensionFilters().add(filter);
        File file = chooser.showSaveDialog(stage); // 显示文件保存对话框
        if (file == null) { // 文件对象为空,表示没有选择任何文件
            label.setText("未选择任何文件");
        } else { // 文件对象非空,表示选择了某个文件
            label.setText("准备保存的文件路径是:"+file.getAbsolutePath());
        }
    }
});

flowPane.getChildren().add(btn2); // 往流式窗格上添加按钮

单击按钮后弹出的对话框如下图所示:

文件对话框中进入到指定目录,并在对话框下方的文件名一栏填写待保存的文件名称,此时对话框界面如下图所示:

单击确定按钮,回到主程序的窗口界面如下图所示,可见主程序也获取到了该文件的完整路径:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1303566.html

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

相关文章

件夹和文件比较软件VisualDiffer mac功能介绍

VisualDiffer mac是一款运行在MacOS上的文件夹和文件快速比较工具。VisualDiffer可以对不同文件夹中文件或文档做出比较或者比较两个文件的路径。还可以通过UNIS diff命令快速、标准和可靠的比较出各类不同的文件夹和文件结果&#xff0c;使用不同的颜色直观地显示。 VisualDif…

基于单片机智能浇花控制系统设计

**单片机设计介绍&#xff0c;基于单片机智能浇花控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能浇花控制系统可以通过水泵、传感器和单片机等硬件组件实现自动浇水&#xff0c;减轻人工浇花的工作…

酷滴科技出席浦发银行第七届国际金融科技创新大赛

12月7日&#xff0c;浦发银行全球金融科技创新大赛在上海展开决赛。本届大会以“科技金融&#xff0c;激发创新力量”为主题&#xff0c;聚焦金融行业数字化转型过程中的痛点与难点&#xff0c;旨在探讨新时代下金融科技的新角色、新机遇以及新挑战。酷滴科技CEO张沈分享了酷滴…

网络基础(七):传输层协议介绍

目录 一、TCP协议&#xff08;传输控制协议&#xff09; 1、TCP协议介绍 2、TCP协议特性 3、TCP报文格式 4、TCP的三次握手 4.1TCP三次握手的概念 4.2TCP三次握手流程图 4.3 TCP三次握手阐释说明 5、TCP的四次挥手 5.1TCP四次挥手的概念 5.2TCP四次挥手的流程图 5.…

MySQL数据库——锁-表级锁(表锁、元数据锁、意向锁)

目录 介绍 表锁 语法 特点 元数据锁 介绍 演示 意向锁 介绍 分类 演示 介绍 表级锁&#xff0c;每次操作锁住整张表。锁定粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。 对于表级锁&#xff0c;主要…

108.STL adjacent_find算法

adjacent_find 是C STL中的算法之一&#xff0c;用于在指定范围内查找相邻重复的元素&#xff0c;返回第一对相邻重复元素的第一个元素的迭代器。 以下是 adjacent_find 的基本用法&#xff1a; #include <iostream> #include <algorithm> #include <vector>…

Edge浏览器版本更新后Copilot按钮消失的解决应对方式

需求背景 今天突然发现Edge浏览器右上角的Copilot按钮不见了&#xff0c;排查了一下&#xff0c;发现可能是浏览器自动升级到120版本后&#xff0c;关闭了右上角的Copilot按钮。案发现场如下&#xff1a; 原因如下&#xff1a; 说实话&#xff0c;人家这个插件还是很好用的&…

智能优化算法应用:基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂群算法4.实验参数设定5.算法结果6.…

基于SpringBoot 校园招聘系统设计与实现(源码+文档+可视化HTML+数据库)

摘 要 基于SpringBoot 校园招聘系统是一种基于Java技术的校园招聘和可视化展示的系统。该系统通过采集和整合各类招聘网站、社交媒体等渠道的数据&#xff0c;对招聘岗位进行深入分析&#xff0c;并将分析结果以直观、易懂的可视化形式呈现。系统能够自动从多个数据源获取招聘…

【Docker】进阶之路:(十二)Docker Composer

【Docker】进阶之路&#xff1a;&#xff08;十二&#xff09;Docker Composer Docker Compose 简介安装 Docker Compose模板文件语法docker-compose.yml 语法说明imagecommandlinksexternal_linksportsexposevolumesvolunes_fromenvironmentenv_fileextendsnetpiddnscap_add,c…

MySQL 教程 2.1.1

MySQL 插入数据 MySQL 表中使用 INSERT INTO 语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据&#xff0c;或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法&#xff1a; INSERT INTO table_name (colu…

HTML行内元素和块级元素的区别? 分别有哪些?

目录 一、行内元素和块级元素的区别二、行内元素和块级元素分别有哪些1、行内元素2、块级元素 一、行内元素和块级元素的区别 1、行内元素不会占据整行&#xff0c;在一条直线上排列&#xff0c;都是同一行&#xff0c;水平方向排列&#xff1b;    2、块级元素可以包含行内…

Acrobat Pro中不能使用有道词典取词翻译

编辑–>首选项–>安全性&#xff08;增强–>启动时启用保护模式&#xff08;预览&#xff09;&#xff0c;取消前面的勾即可

智能优化算法应用:基于减法平均算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于减法平均算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于减法平均算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.减法平均算法4.实验参数设定5.算法结果6.参考…

docker-compose的介绍与使用

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml&#xff0c;其中定义的每个服务可以通过 image 指令指定镜像或 build 指令&#xff08;需要 Dockerfile&#xff09;来自动构建。 注意如果使用 build 指令&#xff0c;在 Dockerfile 中设置…

【EventBus】EventBus的基本用法

一、EventBus基本用法 目录 前言1、EventBus要素与ThreadMode2、EventBus的基本用法3、EventBus的黏性事件 前言 EventBus是一款针对于Android优化的发布-订阅事件总线。它优化了各组件、组件与后台之间的通信&#xff0c;可以用于代替广播实现通信。 1、EventBus要素与Th…

利用Rclone将阿里云对象存储迁移至雨云对象存储的教程,对象存储数据迁移教程

使用Rclone将阿里云对象存储(OSS)的文件全部迁移至雨云对象存储(ROS)的教程&#xff0c;其他的对象存储也可以参照本教程。 Rclone简介 Rclone 是一个用于和同步云平台同步文件和目录命令行工具。采用 Go 语言开发。 它允许在文件系统和云存储服务之间或在多个云存储服务之间…

(C++)只出现一次的数字III--异或

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://le…

【桌面应用开发】Tauri是什么?基于Rust的桌面应用

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

NGROK内网穿透工具-实战+源码下载

1、功能概述&#xff1f; 本案例中使用ngrok内网穿透工具&#xff0c;使用方便&#xff0c;不需要注册等麻烦的操作&#xff0c;永久使用&#xff0c;一键搞定。 我们在项目中有这样一种需求&#xff1a; 甲方&#xff1a;汤工你能不能把你们正在开发的项目或者页面发给我看…