消息对话框(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
来大幅调整内置对话框的样式。若要取得Dialog
的DialogPane
,可使用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