Swing中提供了JOptionPane类来实现类似Windows平台下的MessageBox的功能,同样在Java中也有,利用 JOptionPane类中的各个static方法来生成各种标准的对话框,实现显示出信息、提出问题、警告、用户输入参数等功能。这些对话框都是模式对话框。
ConfirmDialog --- 确认对话框,提出问题,然后由用户自己来确认(按"Yes"或"No"按钮)
InputDialog --- 提示输入文本
MessageDialog --- 显示信息
OptionDialog -- 组合其它三个对话框类型。
这四个对话框可以采用showXXXDialog()来显示,如showConfirmDialog()显示确认对话框、 showInputDialog()显示输入文本对话框、showMessageDialog()显示信息对话框、showOptionDialog() 显示选择性的对话框。它们所使用的参数说明如下:
① ParentComponent:指示对话框的父窗口对象,一般为当前窗口。也可以为null即采用缺省的Frame作为父窗口,此时对话框将设置在屏幕的正中。
② message:指示要在对话框内显示的描述性的文字
③ String title:标题条文字串。
④ Component:在对话框内要显示的组件(如按钮)
⑤ Icon:在对话框内要显示的图标
⑥ messageType:一般可以为如下的值ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE、PLAIN_MESSAGE、
⑦ optionType:它决定在对话框的底部所要显示的按钮选项。一般可以为DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION、OK_CANCEL_OPTION。
使用实例:
(1)显示MessageDialog
JOptionPane.showMessageDialog(null, "在对话框内显示的描述性的文字", "标题条文字串", JOptionPane.ERROR_MESSAGE);
(2)显示ConfirmDialog
- JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION);
JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION);
(3)显示OptionDialog:该种对话框可以由用户自己来设置各个按钮的个数并返回用户点击各个按钮的序号(从0开始计数)
- Object[] options = {"确定","取消","帮助"};
- int response=JOptionPane.showOptionDialog(this, "这是个选项对话框,用户可以选择自己的按钮的个数", "选项对话框标题",JOptionPane.YES_OPTION,
- JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if(response==0) { this.setTitle("您按下了第OK按钮 "); } else if(response==1) { this.setTitle("您按下了第Cancel按钮 "); } else if(response==2) { this.setTitle("您按下了第Help按钮 "); }
Object[] options = {"确定","取消","帮助"};
int response=JOptionPane.showOptionDialog(this, "这是个选项对话框,用户可以选择自己的按钮的个数", "选项对话框标题",JOptionPane.YES_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if(response==0) { this.setTitle("您按下了第OK按钮 "); } else if(response==1) { this.setTitle("您按下了第Cancel按钮 "); } else if(response==2) { this.setTitle("您按下了第Help按钮 "); }
(4)显示InputDialog 以便让用户进行输入
- String inputValue = JOptionPane.showInputDialog("Please input
- a value");
String inputValue = JOptionPane.showInputDialog("Please input
a value");
(5)显示InputDialog 以便让用户进行选择地输入
- Object[] possibleValues = { "First", "Second", "Third" }; //用户的选择项目
- Object selectedValue = JOptionPane.showInputDialog(null, "Choose one","Input",JOptionPane.INFORMATION_MESSAGE, null, possibleValues,possibleValues[0]);
- setTitle("您按下了"+(String)selectedValue+"项目");
public class JOptionPane extends JComponent implements Accessible
JOptionPane
有助于方便地弹出要求用户提供值或向其发出通知的标准对话框。有关使用 JOptionPane
的信息,请参见 The Java Tutorial 中的 How to Make Dialogs 一节。
虽然由于方法数多使 JOptionPane
类可能显得复杂,但几乎所有此类的使用都是对下列静态 showXxxDialog
方法之一的单行调用:
方法名 描述 showConfirmDialog 询问一个确认问题,如 yes/no/cancel。 showInputDialog 提示要求某些输入。 showMessageDialog 告知用户某事已发生。 showOptionDialog 上述三项的大统一 (Grand Unification)。
所有这些方法还可能以 showInternalXXX
风格出现,该风格使用内部窗体来保存对话框(请参见 JInternalFrame
)。此外还定义了多种便捷方法,这些方法重载那些基本方法,使用不同的参数列表。
所有对话框都是有模式的。在用户交互完成之前,每个 showXxxDialog
方法都一直阻塞调用者。
图标 | 消息 |
输入值 | |
选项按钮 |
ComponentOrientation
属性。
参数:
这些方法的参数遵守一致的模式:
parentComponent
- 定义作为此对话框的父对话框的
messageComponent
。通过两种方式使用此参数:包含它的Frame
可以用作对话框的父Frame
,在对话框的位置使用其屏幕坐标。一般情况下,将对话框紧靠组件置于其之下。此参数可以为null
,在这种情况下,默认的Frame
用作父级,并且对话框将居中位于屏幕上(取决于 L&F)。- 要置于对话框中的描述消息。在最常见的应用中,message 就是一个
messageTypeString
或String
常量。不过,此参数的类型实际上是Object
。其解释依赖于其类型:Object[]
- 对象数组被解释为在纵向堆栈中排列的一系列 message(每个对象一个)。解释是递归式的,即根据其类型解释数组中的每个对象。
Component- 该
IconComponent
在对话框中显示。- 该
其他Icon
被包装在JLabel
中并在对话框中显示。- 该对象通过调用其
toString
方法被转换为String
。结果被包装在JLabel
中显示。- 定义 message 的样式。外观管理器根据此值对对话框进行不同地布置,并且通常提供默认图标。可能的值为:
optionType
ERROR_MESSAGE
INFORMATION_MESSAGE
WARNING_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE
- 定义在对话框的底部显示的选项按钮的集合:
options用户并非仅限于使用此选项按钮集合。使用 options 参数可以提供想使用的任何按钮。
DEFAULT_OPTION
YES_NO_OPTION
YES_NO_CANCEL_OPTION
OK_CANCEL_OPTION
- 将在对话框底部显示的选项按钮集合的更详细描述。options 参数的常规值是
iconString
数组,但是参数类型是Object
数组。根据对象的以下类型为每个对象创建一个按钮:Component
- 该组件被直接添加到按钮行中。
Icon- 创建的
其他JButton
以此图标作为其标签。- 该
Object
通过使用其toString
方法转换为字符串,并使用该结果作为JButton
的标签。- 要置于对话框中的装饰性图标。图标的默认值由
titlemessageType
参数确定。- 对话框的标题。
initialValue- 默认选择(输入值)。
当选择更改时,调用生成 PropertyChangeEvent
的 setValue
方法。
如果已为所有输入 setWantsInput
配置了 JOptionPane
,则还可以侦听绑定属性 JOptionPane.INPUT_VALUE_PROPERTY
,以确定何时用户输入或选择了值。
当其中一个 showXxxDialog
方法返回整数时,可能的值为:
YES_OPTION
NO_OPTION
CANCEL_OPTION
OK_OPTION
CLOSED_OPTION
示例:
-
显示一个错误对话框,该对话框显示的 message 为 'alert':
-
JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);
显示一个内部信息对话框,其 message 为 'information':
-
JOptionPane.showInternalMessageDialog(frame, "information",
-
- "information", JOptionPane.INFORMATION_MESSAGE);
显示一个信息面板,其 options 为 "yes/no",message 为 'choose one':
-
-
JOptionPane.showConfirmDialog(null,
-
- "choose one", "choose one", JOptionPane.YES_NO_OPTION);
显示一个内部信息对话框,其 options 为 "yes/no/cancel",message 为 'please choose one',并具有 title 信息:
-
-
JOptionPane.showInternalConfirmDialog(frame,
-
- "please choose one", "information",
-
- JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
显示一个警告对话框,其 options 为 OK、CANCEL,title 为 'Warning',message 为 'Click OK to continue':
-
-
Object[] options = { "OK", "CANCEL" };
JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning",-
- JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
-
- null, options, options[0]);
显示一个要求用户键入 String 的对话框:
-
-
String inputValue = JOptionPane.showInputDialog("Please input a value");
显示一个要求用户选择 String 的对话框:
-
Object[] possibleValues = { "First", "Second", "Third" };
Object selectedValue = JOptionPane.showInputDialog(null,-
- "Choose one", "Input",
-
- JOptionPane.INFORMATION_MESSAGE, null,
-
- possibleValues, possibleValues[0]);
-
直接使用:
要直接创建和使用 JOptionPane
,标准模式大致如下:
JOptionPane pane = new JOptionPane(arguments); pane.set.Xxxx(...); // Configure JDialog dialog = pane.createDialog(parentComponent, title); dialog.show(); Object selectedValue = pane.getValue(); if(selectedValue == null) return CLOSED_OPTION; //If there is not an array of option buttons: if(options == null) { if(selectedValue instanceof Integer) return ((Integer)selectedValue).intValue(); return CLOSED_OPTION; } //If there is an array of option buttons: for(int counter = 0, maxCounter = options.length; counter < maxCounter; counter++) { if(options[counter].equals(selectedValue)) return counter; } return CLOSED_OPTION;