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开发笔记(序)章节目录》
上一篇: Docker运行dotnetcore
下一篇: 尖椒小炒肉这样做最好吃你知道吗?