Java开发笔记(一百三十四)Swing的基本对话框
桌面程序在运行过程中,时常需要在主界面之上弹出小窗,把某种消息告知用户,以便用户及时知晓并对症处理。这类小窗口通常称作对话框,依据消息交互的过程,可将对话框分为三类:消息对话框、确认对话框、输入对话框,分别介绍如下:
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的基本对话框的更多相关文章
- Java开发笔记(三十四)字符串的赋值及类型转换
不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...
- Java开发笔记(三十五)字符串格式化
前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...
- Java开发笔记(三十八)利用正则表达式校验字符串
前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...
- Java开发笔记(三十九)日期工具Date
Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的 ...
- Java开发笔记(八十四)文件与目录的管理
程序除了处理内存中的数据结构,还要操作磁盘上的各类文件,这里的磁盘是个统称,泛指可以持久保留数据的存储介质,包括但不限于:插在软驱中的软盘.固定在机箱中的硬盘.插在光驱中的光盘.插在USB接口上的U盘 ...
- Java开发笔记(二十四)方法的组成形式
经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是 ...
- Java开发笔记(三十)大小数BigDecimal
前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal.如果说设计BigInteger的目的是替代int和long类型,那么设计Bi ...
- Java开发笔记(三十二)字符型与整型相互转化
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...
- Java开发笔记(三十六)字符串的常用方法
不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可 ...
- Java开发笔记(六十四)静态方法引用和实例方法引用
前面介绍了方法引用的概念及其业务场景,虽然在所列举的案例之中方法引用确实好用,但是显而易见这些案例的适用场合非常狭窄,因为被引用的方法必须属于外层匿名方法(即Lambda表达式)的数据类型,像isEm ...
随机推荐
- LeetCode 1215. Stepping Numbers
原题链接在这里:https://leetcode.com/problems/stepping-numbers/ 题目: A Stepping Number is an integer such tha ...
- zzulioj - 2619: 小新的信息统计
题目链接:http://acm.zzuli.edu.cn/problem.php?id=2619 题目描述 马上就要新生赛了,QQ群里正在统计所有人的信息,每个人需要从群里下载文件,然后 ...
- inertia 服务端驱动的spa 开发框架
inertia 可以让我们开发server 驱动的单页面应用开发,从目前的github代码来看,代码量并不多,相关的文档也还比较少 introducing-inertia-js 这个连接值得看下 参考 ...
- Mac查看进程
Last login: Tue Jun 11 11:18:10 on ttys001 liangyufengdeMacBook-Pro:vod-admin liangyufeng$ lsof -i:6 ...
- 解决Shell脚本$'\r': command not found问题
造成这个问题的原因是Windows下的空行,我们只需要把文件转成unix就好 Centos下,执行yum install dos2unix,然后dos2unix [file],再执行shell命令就好 ...
- win10照片查看器不能看jpg等格式图片
1.首先,我们需要使用注册表编辑器来开启Win10系统照片查看器功能,因为其实这个功能是被隐藏了,那么按下Windows徽标键+R键,打开运行命令窗口,输入“regedit”命令. 2.打开注册表编辑 ...
- Kali linux 2018 安装 Fluxion
本人是在VMware 12下安装 Kali linux 2018.2版本 安装完成后 用命令行运行更新 apt-get update apt-get full-upgrade 更新所有组件. ...
- CTF PHP反序列化
目录 php反序列化 一.序列化 二.魔术方法 1.构造函数和析构函数 2.__sleep()和__wakeup() 3.__toString() 4.__set(), __get(), __isse ...
- 安装关系型数据库MySQL和大数据处理框架Hadoop
1. 简述Hadoop平台的起源.发展历史与应用现状.列举发展过程中重要的事件.主要版本.主要厂商:国内外Hadoop应用的典型案例. (1)Hadoop的介绍: Hadoop最早起源于Nutch,N ...
- 第07组 Beta冲刺(1/5)
队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:代码编辑器 展示GitHub当日代码/文档签入记录:(组内共用,已询问过助教小姐姐) ...