桌面程序在运行过程中,时常需要在主界面之上弹出小窗,把某种消息告知用户,以便用户及时知晓并对症处理。这类小窗口通常称作对话框,依据消息交互的过程,可将对话框分为三类:消息对话框、确认对话框、输入对话框,分别介绍如下:

1、消息对话框
这类对话框仅仅向用户展示一段文本,告诉用户发生了什么事情。它起到了提示的作用,但不支持用户干预事务。不管用户同意与否,都无法改变事件的进展。
在Swing框架中,消息对话框由消息的标题、内容、确定按钮组成。调用JOptionPane工具的静态方法showMessageDialog即可弹出消息对话框,该方法的第一个参数为消息框依赖的窗口对象,第二个参数为消息的内容文本,第三个参数为消息的标题文本,第四个参数为消息的图标类型,图标类型主要有下列五种:
JOptionPane.PLAIN_MESSAGE:无消息图标。
JOptionPane.INFORMATION_MESSAGE:灰圈信息图标,用于表示提示消息。
JOptionPane.QUESTION_MESSAGE:方框问号图标,用于表示确认消息。
JOptionPane.WARNING_MESSAGE:三角感叹图标,用于表示警告消息。
JOptionPane.ERROR_MESSAGE:红圈红叉图标,用于表示错误消息。
下面是在主界面上显示消息对话框的代码例子:

				// 显示消息对话框。消息对话框只有一个确定按钮
JOptionPane.showMessageDialog(frame, "系统即将关机,请赶紧保存文件", "致命错误", JOptionPane.ERROR_MESSAGE);

从以上代码可知,当前消息展示了系统出现异常的错误消息,程序运行后的对话框效果如下图所示。

2、确认对话框
这类对话框在展示事件说明的同时,给定几个可能的选项,以便用户做出恰当的选择,然后程序再根据用户的选择分别进行后续处理。
在Swing框架中,确认对话框由消息的标题、内容,以及若干选项按钮组成。有时选项控件包括“是”、“否”、“取消”三个按钮,有时包括“确定”、“取消”两个按钮。调用JOptionPane工具的静态方法showConfirmDialog即可弹出确认对话框,该方法的输入参数说明同前述的showMessageDialog方法,不同之处在于,showConfirmDialog方法存在整型返回值,返回参数主要有以下三个数值,代表用户单击了哪个按钮:
1、JOptionPane.YES_OPTION:表示肯定的选择,对应“是”按钮与“确认”按钮。
2、JOptionPane.NO_OPTION:表示否定的选择,对应“否”按钮。
3、JOptionPane.CANCEL_OPTION:表示取消选择,也就是不做任何选择,对应“取消”按钮。
下面是在主界面上显示确认对话框,并开展分支处理的代码例子:

				// 显示确认对话框。确认对话框有“是”、“否”、“取消”三个按钮,该对话框返回哪个按钮被单击了
// 该对话框不支持类型QUESTION_MESSAGE,且固定显示问号图标
int result = JOptionPane.showConfirmDialog(frame, "尊敬的用户,你真的要卸载我吗?", "温馨提示", JOptionPane.INFORMATION_MESSAGE);
if (result == JOptionPane.YES_OPTION) { // 单击了“是”按钮
label.setText("您选择了“是”按钮。虽然依依不舍,但是只能离开了");
} else if (result == JOptionPane.NO_OPTION) { // 单击了“否”按钮
label.setText("您选择了“否”按钮。让我再陪你三百六十五个日夜");
} else if (result == JOptionPane.CANCEL_OPTION) { // 单击了“取消”按钮
label.setText("您选择了“取消”按钮。感谢你依然如昨的不变情怀");
}

运行包含上面代码的测试确认程序,一番操作后弹出如下图所示的确认对话框。


分别单击对话框上面的三个按钮,程序主界面的显示效果如下面三张图所示。

3、输入对话框
这类对话框需要用户提供更加详细的信息,而不仅仅“是”或者“否”的选择,例如:要求用户输入一段文本,要求用户在一组列表里选择其中一个,诸如此类。
在Swing框架中,输入对话框由消息的标题、内容、确认按钮、取消按钮,以及接收用户输入的控件组成。对于文本输入的情况,对话框上会显示单行输入框TextField;对于列表选择的情况,对话框上会显示下拉框ComboBox。调用JOptionPane工具的静态方法showInputDialog即可弹出输入对话框,只输入文本的话,该方法依旧填写四个入参:窗口对象、内容文本、标题文本、图标类型;但若要求在列表中选择,则该方法还需增加几个入参,用来显示列表的文本数组,以及默认选中的列表元素。
下面是在主界面上显示文本输入对话框的代码例子:

				// 显示输入对话框。输入对话框有“确认”、“取消”两个按钮,该对话框返回输入框内的文本
String result = JOptionPane.showInputDialog(frame, "请输入您要查询的商品名称:", "搜索一下", JOptionPane.QUESTION_MESSAGE);
label.setText("您输入的商品名称是:"+result);

运行以上的测试输入代码,通过单击按钮弹出文本输入对话框,再键入编辑文本,这时的对话框效果如下图所示。


接着分别单击确认和取消按钮,两种情况之下的程序主界面效果如以下两张图所示。


还有在主界面上显示列表输入对话框的代码例子:

				Object[] options = new Object[]{"鱼香肉丝饭", "香菇滑鸡饭", "黑椒牛排饭"};
// 显示下拉对话框。下拉对话框需要传入选项数组以及默认选项,该对话框返回下拉框的选择项
Object result = JOptionPane.showInputDialog(frame, "请选择盒饭名称", "吃饭啦", JOptionPane.WARNING_MESSAGE, null, options, options[0]);
label.setText("您点的盒饭是:"+result);

运行以上的测试列表代码,通过单击按钮弹出的对话框初始界面如下图所示。


然后单击下拉框,并在弹出的下拉列表中选择某一项,选完前后的对话框效果如以下两张图所示。


最后单击对话框里的确认按钮,程序主界面便展示了刚才列表选择的结果,正如下图所示。


注意到这些对话框统统调用了静态方法,既然没有事先创建对话框对象,也就无法调用setFont方法设置对话框内部控件的字体了。此时可通过UIManager工具单独给对话框设置字体,详细的设置代码如下所示:

		Font font = new Font("中号", Font.PLAIN, 16);
// 设置对话框内部按钮的展示效果
UIManager.put("Button.font", new FontUIResource(font));
// 设置对话框内部标签的展示效果
UIManager.put("Label.font", new FontUIResource(font));
// 设置对话框内部输入框的展示效果
UIManager.put("TextField.font", new FontUIResource(font));
// 设置对话框内部下拉框的展示效果
UIManager.put("ComboBox.font", new FontUIResource(font));

  


更多Java技术文章参见《Java开发笔记(序)章节目录

Java开发笔记(一百三十四)Swing的基本对话框的更多相关文章

  1. Java开发笔记(三十四)字符串的赋值及类型转换

    不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...

  2. Java开发笔记(三十五)字符串格式化

    前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...

  3. Java开发笔记(三十八)利用正则表达式校验字符串

    前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...

  4. Java开发笔记(三十九)日期工具Date

    Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的 ...

  5. Java开发笔记(八十四)文件与目录的管理

    程序除了处理内存中的数据结构,还要操作磁盘上的各类文件,这里的磁盘是个统称,泛指可以持久保留数据的存储介质,包括但不限于:插在软驱中的软盘.固定在机箱中的硬盘.插在光驱中的光盘.插在USB接口上的U盘 ...

  6. Java开发笔记(二十四)方法的组成形式

    经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是 ...

  7. Java开发笔记(三十)大小数BigDecimal

    前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal.如果说设计BigInteger的目的是替代int和long类型,那么设计Bi ...

  8. Java开发笔记(三十二)字符型与整型相互转化

    前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...

  9. Java开发笔记(三十六)字符串的常用方法

    不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可 ...

  10. Java开发笔记(六十四)静态方法引用和实例方法引用

    前面介绍了方法引用的概念及其业务场景,虽然在所列举的案例之中方法引用确实好用,但是显而易见这些案例的适用场合非常狭窄,因为被引用的方法必须属于外层匿名方法(即Lambda表达式)的数据类型,像isEm ...

随机推荐

  1. 斜率优化板题 HDU2829 Lawrence

    题目大意:给定一个长度为nnn的序列,至多将序列分成m+1m+1m+1段,每段序列都有权值,权值为序列内两个数两两相乘之和.求序列权值和最小为多少? 数据规模:m<=n<=1000.m&l ...

  2. java 修改HttpServletRequest的参数或请求头

    场景:过滤器中获取参数Token并添加到请求头(用户认证兼容老系统) 请求头和请求参数是不能直接修改,也没有提供修改的方法,但是可以在过滤器和拦截器中使用HttpServletRequestWrapp ...

  3. 14.go内置的rate包学习2(有花操作,必看)

    package main import ( "fmt" "golang.org/x/time/rate" "time" ) func mai ...

  4. Tensorflow细节-P309-监控指标可视化

    注意下面一个点就ok了 with tf.name_scope('input_reshape'): # 注意看这里,图片的生成 image_shaped_input = tf.reshape(x, [- ...

  5. oracle 按每天,每周,每月,每季度,每年查询统计数据

    oracle 按每天,每周,每月,每季度,每年查询统计数据 //按天统计 select count(dataid) as 每天操作数量, sum() from tablename group by t ...

  6. [USACO14MAR] Sabotage 二分答案 分数规划

    [USACO14MAR] Sabotage 二分答案 分数规划 最终答案的式子: \[ \frac{sum-sum[l,r]}{n-len[l,r]}\le ans \] 转换一下: \[ sum[1 ...

  7. 洛谷 P2004 领地选择 题解

    P2004 领地选择 题目描述 作为在虚拟世界里统帅千军万马的领袖,小Z认为天时.地利.人和三者是缺一不可的,所以,谨慎地选择首都的位置对于小T来说是非常重要的. 首都被认为是一个占地C*C的正方形. ...

  8. 56、Spark Streaming: transform以及实时黑名单过滤案例实战

    一.transform以及实时黑名单过滤案例实战 1.概述 transform操作,应用在DStream上时,可以用于执行任意的RDD到RDD的转换操作.它可以用于实现,DStream API中所没有 ...

  9. Linux基础及常用指令

    1.Linux目录结构 bin(usr/bin,user/local/bin) #存放常用指令,如cp.cat.chown等 sbin(usr/sbin,user/local/sbin) #高权限指令 ...

  10. 程序日志-应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-18)授予针对 CLSID 为 {D63B10C5-BB46-4990-A94F-E40B9D520

    应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-1 ...