12.2.7 使用JOptionPane
12.2.7 使用JOptionPane
通过JOptionPane可以非常方便地创建一些简单的对话框,Swing已经为这些对话框添加了相应的组件,无须程序员手动添加组件。JOptionPane提供了如下4个方法来创建对话框。
| 方法 | 描述 | 
|---|---|
| showMessageDialog/showInternalMessageDialog | 消息对话框,告知用户某事已发生,用户只能单击“确定”按钮,类似于 JavaScript的alert函数。 | 
| showConfirmDialog/showInternalConfirmDialog | 确认对话框,向用户确认某个问题,用户可以选择 yes、no、cancel等选项。类似于JavaScript的comfirm函数。该方法返回用户单击了哪个按钮。 | 
| showInputDialog/showInternalInputDialog | 输入对话框,提示要求输入某些信息,类似于 JavaScript的prompt函数。该方法返回用户输入的字符串。 | 
| showOptionDialog/showInternalOptionDialog | 自定义选项对话框,允许使用自定义选项,可以取代 showConfirmDialog所产生的对话框,只是用起来更复杂。 | 
JOptionPane产生的所有对话框都是模式的,在用户完成与对话框的交互之前,showXxxDialog方法都将一直阻塞当前线程。
JOptionPane对话框 区域划分
JOptionPane所产生的对话框总是具有如图12.10所示的布局:

上面这些方法都提供了相应的showInternalXxxDialog版本,这种方法以InternalFrame的方式打开对话框。
下面就图12.10中所示的4个区域分别进行介绍
(1)输入区
如果创建的对话框无须接收用户输入,则输入区不存在。输入区组件可以是普通文本框组件,也可以是下拉列表框组件。
如果调用上面的showInternalXxxDialog()方法时指定了一个数组类型的selectionValues参数,则输入区包含一个下拉列表框组件。
(2)图标区
左上角的图标会随创建的对话框所包含消息类型的不同而不同,JOptionPane可以提供如下5种消息类型。
| messageType参数 | 描述 | 
|---|---|
| JOptionPane.ERROR_MESSAGE | 错误消息,其图标是一个红色的X图标,如图12.10所示 | 
| JOptionPane.INFORMATION_MESSAGE | 普通消息,其默认图标是蓝色的感叹号。 | 
| JOptionPane.WARNING_MESSAGE | 警告消息,其默认图标是黄色感叹号。 | 
| JOptionPane.QUESTION_MESSAGE | 问题消息,其默认图标是绿色问号。 | 
| JOptionPane.PLAIN_MESSAGE | 普通消息,没有默认图标 | 
实际上,JOptionPane的所有showXxxDialog()方法都可以提供一个可选的icon参数,用于指定该对话框的图标。
调用showXxxDialog方法时还可以指定一个可选的title参数,该参数指定所创建对话框的标题。
(3)消息区
不管是哪种对话框,其消息区总是存在的,消息区的内容通过message参数来指定,根据message参数的类型不同,消息区显示的内容也是不同的。该message参数可以是如下几种类型
- String类型:将该字符串对象包装成- JLabel对象,然后显示在对话框中。
- Icon:将该- Icon被包装成- JLabel后作为对话框的消息
- Component:将该- Component在对话框的消息区中显示出来。
- Object[]:对象数组被解释为在纵向排列的一系列- message对象,每个- message对象根据其实际类型又可以是字符串、图标、组件、对象数组等。
- 其他类型:系统调用该对象的toString方法返回一个字符串,并将该字符串对象包装成JLabel对象,然后显示在对话框中。
大部分时候对话框的消息区都是普通字符串,但使用Component作为消息区组件则更加灵活,因为该Component参数几乎可以是任何对象,从而可以让对话框的消息区包含任何内容。
(4)按钮区
对话框底部的按钮区也是一定存在的,但所包含的按钮则会随对话框的类型、选项类型而改变。
输入框showInputDialog和消息框showMessageDialog的按钮
对于调用showInputDialog()和showMessageDialog()方法得到的对话框,底部总是包含“确定”和“取消”两个标准按钮。
确认对话框showConfirmDialog的按钮
对于showConfirmDialog()所打开的确认对话框,则可以指定一个整数类型的optionType参数,该参数可以取如下几个值。
| optionType参数 | 描述 | 
|---|---|
| JOptionPane.DEFAULT_OPTION | 按钮区只包含一个“确定”按钮。 | 
| JOptionPane.YES_NO_OPTION | 按钮区包含“是”、“否”两个按钮。 | 
| JOptionPane.YES_NO_CANCEL_OPTION | 按钮区包含“是”、“否”、“取消”三个按钮。 | 
| JOptionPane.OK_CANCEL_OPTION | 按钮区包含“确定”、“取消”两个按钮。 | 
选项对话框showOptionDialog的按钮
| 方法 | 描述 | 
|---|---|
| static int showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue) | Brings up a dialog with a specified icon, where the initial choice is determined by the initialValue parameter and the number of choices is determined by the optionType parameter. | 
如果使用showOptionDialog方法来创建选项对话框,则可以通过指定一个Object[]类型的options参数来设置按钮区能使用的选项按钮。与前面的message参数类似的是,options数组的数组元素可以是如下几种类型。
| options数组可用类型 | 描述 | 
|---|---|
| String | 使用该字符串来创建一个 JButton,并将其显示在按钮区。 | 
| Icon | 使用该 Icon来创建一个JButton,并将其显示在按钮区。 | 
| Component | 直接将该组件显示在按钮区。 | 
| 其他类型 | 系统调用该对象的 toString方法返回一个字符串,并使用该字符串来创建一个JButton,并将其显示在按钮区。 | 
对话框的返回值
当用户与对话框交互结束后,不同类型对话框的返回值如下。
| 创建方法 | 返回值 | 
|---|---|
| showMessageDialog | 无返回值。 | 
| showInputDialog | 返回用户输入或选择的字符串。 | 
| showConfirmDialog | 返回一个整数代表用户选择的选项。 | 
| showOptionDialog | 返回一个整数代表用户选择的选项,如果用户选择第一项,则返回0;如果选择第二项,则返回1;……依此类推。 | 
showConfirmDialog的返回值
对showConfirmDialog所产生的对话框,有如下几个返回值
| showConfirmDialog返回值 | 描述 | 
|---|---|
| JOptionPane.YES_OPTION | 用户单击了“是”按钮后返回。 | 
| JOptionPane.NO_OPTION | 用户单击了“否”按钮后返回。 | 
| JOptionPane.CANCEL_OPTION | 用户单击了“取消”按钮后返回。 | 
| JOptionPane.OK_OPTION | 用户单击了“确定”按钮后返回 | 
| JOptionPane.CLOSED_OPTION | 用户单击了对话框右上角的“x”按钮后返回。 | 
对于showOptionDialog方法所产生的对话框,也可能返回一个CLOSED_OPTION值,当用户单击了对话框右上角的“x”按钮后将返回该值
图12.11已经非常清楚地显示了JOptionPane所支持的4种对话框,以及所有对话框的通用选项、每个对话框的特定选项。
程序 对话框
下面程序允许使用JOptionPane来弹出各种对话框
| 1 | import java.util.Date; | 
运行上面程序,会看到如图12.11所示的窗口。

图12.11已经非常清楚地显示了JOptionPane所支持的4种对话框,以及所有对话框的通用选项、每个对话框的特定选项。
读者可以通过运行上面程序来查看JOptionPane所创建的各种对话框。