首页 > 编程语言 >JavaFX 如何使用内置的对话框

JavaFX 如何使用内置的对话框

时间:2024-08-03 22:39:59浏览次数:17  
标签:内置 对话框 rtn JavaFX alert Alert 设置 文本

消息对话框(Alert)

JavaFX的Alert类别其实就是我们熟知的MessageDialog,根据消息类型的不同,分为几种不同的AlertType,在显示时也会有不同的图标以及不同的按钮。分类可列表如下:

  • None:不分类的消息。常用于显示使用说明。
  • Information:一般的提示消息。常用于提示目前程序运行的状态,以及回传的正确结果。
  • Warning:警告消息。常用于显示程序遇到了一些不正常但无重大影响的问题。
  • Error:错误消息。常用于显示程序遇到的严重错误。
  • Confirmation:确认消息。常用于再次确认用户想要进行的动作。

创建Alert对话框的方式很简单,程序如下:

Alert alert = new Alert(AlertType.INFORMATION); // 实体化Alert对话框对象,并直接在建构子设置对话框的消息类型
alert.setTitle("小提示"); //设置对话框窗口的标题列文本
alert.setHeaderText("现在该做什么?"); //设置对话框窗口里的标头文本。若设为空字符串,则表示无标头
alert.setContentText("请按下「确定」按钮。"); //设置对话框的消息文本
alert.showAndWait(); //显示对话框,并等待对话框被关闭时才继续运行之后的程序

运行结果如下:

 

 

 

如果想知道用户按下了对话框的哪个按钮,可以从showAndWait方法的传回值来取得Optional对象所带的ButtonType,或是在对话框被关闭后,使用getResult方法直接取得ButtonType。以确认消息来举例的话,程序如下:

 

final Alert alert = new Alert(AlertType.CONFIRMATION); // 实体化Alert对话框对象,并直接在建构子设置对话框的消息类型
alert.setTitle("MagicLen 范例程序"); //设置对话框窗口的标题列文本
alert.setHeaderText(""); //设置对话框窗口里的标头文本。若设为空字符串,则表示无标头
alert.setContentText("您真的要结束程序吗?"); //设置对话框的消息文本
final Optional<ButtonType> opt = alert.showAndWait();
final ButtonType rtn = opt.get(); //可以直接用「alert.getResult()」来取代
System.out.println(rtn);
if (rtn == ButtonType.OK) {
    //若用户按下「确定」
    Platform.exit(); // 结束程序
} else if(rtn == ButtonType.CANCEL){
    //若用户按下「取消」,也可直接使用else
    final Alert alert2 = new Alert(AlertType.INFORMATION); // 实体化Alert对话框对象,并直接在建构子设置对话框的消息类型
    alert2.setTitle("小提示"); //设置对话框窗口的标题列文本
    alert2.setHeaderText("现在该做什么?"); //设置对话框窗口里的标头文本。若设为空字符串,则表示无标头
    alert2.setContentText("请按下「确定」按钮。"); //设置对话框的消息文本
    alert2.showAndWait(); //显示对话框,并等待对话框被关闭时才继续运行之后的程序
}

运行结果如下:

 

选择对话框(ChoiceDialog)

选择对话框算是一个蛮特别的存在,设计师可以将任何对象加入这个对话框内,被加入的对象会在这对话框内被转成字符串,并且显示在下拉式菜单(ComboBox)中,用法如下:

final ChoiceDialog<String> choiceDialog = new ChoiceDialog("鸡","鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"); // 实体化ChoiceDialog对象,并直接在建构子设置对话框菜单的内容。注意这里将泛型指定为String,所以ChoiceDialog可传入String对象,也会回传被选择的String对象
choiceDialog.setTitle("生肖选取"); //设置对话框窗口的标题列文本
choiceDialog.setHeaderText(""); //设置对话框窗口里的标头文本。若设为空字符串,则表示无标头
choiceDialog.setContentText("请选取您的生肖:"); //设置对话框的消息文本
final Optional<String> opt = choiceDialog.showAndWait(); //显示对话框,并等待对话框被关闭时才继续运行之后的程序
String rtn;
try {
    rtn = opt.get(); //可以直接用「choiceDialog.getResult()」来取代
} catch (final NoSuchElementException ex) {
    rtn = null;
}
if (rtn == null) {
    //没有选择生肖,而是直接关闭对话框
    System.out.println("没有选择生肖");
} else {
    System.out.println("您属" + rtn + "!");
}

 

运行结果如下:

文本输入对话框(TextInputDialog)

跳出一个对话框要用户输入文本算是一个蛮常见的功能,在JavaFX中便有内置这样的输入对话框,用法如下:

 1 final TextInputDialog textInputDialog = new TextInputDialog("小白"); // 实体化TextInputDialog对象,并直接在建构子设置缺省的文本内容。由于输入一定是字符串,所以对话框会直接回传String对象,而不使用泛型
 2 textInputDialog.setTitle("找回密码"); //设置对话框窗口的标题列文本
 3 textInputDialog.setHeaderText("回答以下题目"); //设置对话框窗口里的标头文本。若设为空字符串,则表示无标头
 4 textInputDialog.setContentText("您第一只宠物的名字是?"); //设置对话框的消息文本
 5 final Optional<String> opt = textInputDialog.showAndWait(); //显示对话框,并等待对话框被关闭时才继续运行之后的程序。
 6 String rtn;
 7 try{
 8     rtn = opt.get(); //可以直接用「textInputDialog.getResult()」来取代
 9 }catch(final NoSuchElementException ex){
10     rtn = null;
11 }
12 if(rtn == null){
13     //没有确认输入文本,而是直接关闭对话框
14     System.out.println("没有回答");
15 }else{
16     System.out.println("您的回答是:" + rtn);
17 }

运行结果如下:

更高端的对话框用法-DialogPane

Dialog类别的Stage使用到DialogPane来放置控制项组件,因此可以借由修改DialogPane来大幅调整内置对话框的样式。若要取得DialogDialogPane,可使用getDialogPane()方法,会直接回传DialogPane对象。要修改DialogPane的内容,可以使用setContent这个方法,传入自己制作的Node。

alert.getDialogPane().setContent(content);

可制作出如下,能显示Exception消息的Error Dialog:

另外也可以使用setExpandableContent方法,同样传入自制的Node来创建可扩展与收合内容消息的对话框。

alert.getDialogPane().setExpandableContent(expContent);

 

标签:内置,对话框,rtn,JavaFX,alert,Alert,设置,文本
From: https://www.cnblogs.com/psy5choit/p/18341240

相关文章

  • 前端使用JS内置Blob实现下载各种形式的文件实例
    在前端开发中,JavaScript的Blob对象允许你创建一个包含原始数据的类文件对象。使用Blob可以轻松实现在客户端生成和下载各种类型的文件,例如文本文件、图片、CSV等。下面是一些使用Blob实现文件下载的示例:1.下载文本文件functiondownloadTextFile(filename,text){c......
  • [Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18338279出自【进步*于辰的博客】目录先言1、单行函数1.1lpad/rpad(str1,n,str2)1.2instr(str1,str2[,pos][,n])2、非空判断函数3、日期函数4、正则表达式相关函数4.1......
  • WPF 自定义对话框
    <Windowx:Class="WPFDemo2.窗体.CustomDialogWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas......
  • Python 教程(九):内置模块与第三方模块
    目录专栏列表前言1.模块基础目录结构示例模块`mymodule.py`2.导入模块3.从模块中导入特定内容3.1`from…import*`总结:4.包示例包结构`moduleone.py``moduletwo.py``__init__.py`导入包5.模块搜索路径6.内置模块示例7.第三方库8.`__name__`属性9.初始......
  • Ansible内置模块之file
    RHCE9.0 (点击查看课程介绍) 上课课时:72课时/12天+考试辅导1-2天开班频率:2个月开一期最新新班:7月27日周末班上课方式:面授/直播;提供随堂录播ansible.builtin.file模块用于管理文件和目录的属性。可以创建、删除文件或目录,修改文件权限、所有者等属性。01 选......
  • 简述JavaFX-Web
    Maven版本22.x<!--https://mvnrepository.com/artifact/org.openjfx/javafx-web--><dependency><groupId>org.openjfx</groupId><artifactId>javafx-web</artifactId><version>22.0.2</version></depe......
  • 6.调整内置控件
    每个.NET控件都有许多方法,每个方法都以前缀On命名,例如OnInitialized或OnApplyTemplate。这些是受保护的方法,可以在任何扩展.NET控件的自定义类中重写。它们在控件生命周期中的某些点被调用,使我们能够更改每个控件的默认行为。它们使我们能够做一些简单的事情,例......
  • Python 69个 常用 内置函数 之 总结+实例 篇
    1.abs()返回一个数的绝对值print(abs(-5))#输出5print(abs(5))#输出52.dict()创建一个字典my_dict=dict(name="Alice",age=25)print(my_dict)#输出{'name':'Alice','age':25}3.help()用于获取关于对象的帮助信息help(......
  • Oracle内置SQL函数
    Oracle内置SQL函数F.1字符函数——返回字符值这些函数全都接收的是字符族类型的参数(CHR除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据库类型所受的限制是相同的,比如:VARCHAR2数值被限制为2000字符(O......
  • js-数组内置函数-filter、map、forEach、reduce
    1、过滤数组-filter筛选数组元素,并生成新数组//过滤出分数为60分以上的数据<script>constarr=[{'name':'张三','score':80},{'name':'张六','score':50},{'name':'李四','score&#......