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开发笔记(序)章节目录

posted @ 2019-08-07 22:20  pinlantu  阅读(541)  评论(0编辑  收藏  举报