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 1048. Longest String Chain
原题链接在这里:https://leetcode.com/problems/longest-string-chain/ 题目: Given a list of words, each word con ...
- Clickhouse 性能瓶颈排查 IO过高
前几天公司clickhouse 有个查询很慢.经理一直追问为什么慢 是cpu 不够 还是IO 占用太高,还是其他的原因.于是有了以下的排查 执行该条,在不考虑优化sql 的情况下 进行性能排查 1.首 ...
- vue 自动px单位自动转换rem
vue 适配移动端 假设设计图是375 第一步 安装 lib-flexible npm i lib-flexible --save 第二步 安装 px2rem-loader npm install p ...
- Mysql 创建只读账户
mysql 创建只读账户: 1.查询所有账号信息 SELECT DISTINCT a.`User`,a.`Host`,a.password_expired,a.password_last_change ...
- js constructor typeOf 区别
constructor 属性返回对创建此对象的数组函数的引用. 例如:const obj = {a: 1} console.log(obj.constructor) // funct ...
- python 获取 一个正整数的二进制
#coding=utf- def getbin(a): out = "" # 辗转相除法 ): div = a mod = a % out += str(mod) ): break ...
- 手把手实例对比String、StringBuilder字符串的连接效率及StringBuilder和StringBuffer线程安全的比较
一.字符串连接的效率问题 使用String连接字符串时为什么慢? 小知识点 java中对数组进行初始化后,该数组所占的内存空间.数组长度都是不可变的. 创建一个字符串,为字符串对象分配内存空间,会耗费 ...
- var a = function(){}和var a = function(){}();的区别
var a = function(){ ... ... ... } 声明方法. var a = function(){ ... ... ... }(); 声明方法并执行 demo: var u = f ...
- 20189220 余超《Linux内核原理与分析》第三周作业
操作系统如何工作的 第二章的基础知识 计算机的三大法宝:存储程序计算机,函数调用堆栈机制,中断. 堆栈:堆栈是C语言程序运行时必须使用的几率函数条用路径和参数存储的空间,具体作用分为:记录函数条用的框 ...
- 2015-2016-2《Java程序设计》团队博客1
项目内容 经过一些讨论之后决定了最终的项目:简易画图板项目设计与开发 目标 制作一个能够画各种图形的画板,并能有多种颜色可以选择:输入文本时也可以选择字体:能够保存,新建,和导入图片 实现计划 十一周 ...