zoukankan      html  css  js  c++  java
  • 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开发笔记(序)章节目录

  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/pinlantu/p/11318239.html
Copyright © 2011-2022 走看看