一个对话窗口,是一个独立的子窗口,意味着除了主要的Swing应用程序窗口进行临时公告。 大多数对话框目前的错误消息或警告用户,但对话框可以展示图像,目录树,或几乎任何兼容主要的Swing应用程序,管理。
为方便起见,几个Swing组件类可以直接实例化并显示对话框 。 要创建简单,标准的对话框,您可以JOptionPane
JOptionPane类。 ProgressMonitor
类可以把一个对话框,显示操作的进度。 另外两个类,JColorChooser
, JFileChooser
,还提供了标准对话框。 要带出一个打印对话框,您可以使用的打印 API。要创建一个自定义对话框,直接使用JDialog
类。
简单的对话框中的代码可以说是微乎其微。 例如,这里是一个信息对话框:
下面是创建并显示它的代码:
JOptionPane.showMessageDialog(“帧”,“鸡蛋不应该是绿色的。”);
本节的其余部分包括以下主题:
的对话框概述
每个对话是依赖于一个框架组件。 当该帧被破坏,所以都依赖于它的对话框。 当帧图标,依赖于它的对话框也从屏幕上消失。 当帧deiconified,依赖于它的对话框返回到屏幕上。 一个Swing的JDialog类继承这个从AWT的Dialog
类的行为。
一个对话框可以是模式 。 当一个模态对话框是可见的,它会阻止用户输入程序中的所有其他窗口。JOptionPane创建JDialog
的模式。 要创建一个非模态对话框,你必须直接使用JDialog
类。
从JDK 6中,您可以修改对话窗口中使用的新模式API的方式行为。 见新模式API细节。
JDialog
类是AWT的一个子java.awt.Dialog
java.awt.Dialog类。 它增加了根窗格容器和Dialog
对象为默认关闭操作的支持。 这些, JFrame
有相同的功能,和使用JDialog
直接使用JFrame
非常相似。 如果你打算直接使用JDialog
,那么你就应该明白,在材料使用顶层容器和如何制作框架 ,特别是响应窗口闭幕式。
即使当您使用JOptionPane
实施一个对话框,你仍然使用JDialog
幕后。 原因是JOptionPane
是一个简单的容器,可以自动创建JDialog
,并添加自己JDialog
的内容窗格。
DialogDemo范例
这里是一个图片显示对话框的应用程序。
试试这个:
- 单击“启动”按钮运行对话框演示使用的Java™网络启动 ( 下载JDK 6或更高版本) 。 另外,编译和运行自己的例子,咨询例如指数 。
- 点击显示它! 按钮。
模态对话框会出现。 直到您关闭它,应用程序将反应迟钝,虽然会重绘本身如果有必要。 您可以通过点击一个按钮,在对话框或明确,如通过使用对话框的窗口装饰,关闭该对话框。 - 在更多的对话框窗格中,单击底部的单选按钮,然后显示它! 按钮。
一个非模态对话框会出现。 请注意,DialogDemo窗口保持功能齐全的非模态对话框时。 - 虽然非模态对话框显示,图标化DialogDemo窗口。
该对话框会从屏幕上消失,直到你deiconify DialogDemo窗口。
JOptionPane特点
使用JOptionPane
,你可以快速创建和自定义几种不同类型的对话。 JOptionPane
铺设标准对话框,提供图标,指定对话框的标题和文字,和自定义按钮上的文字提供支持。 其他功能允许您自定义的组件对话框显示指定对话框出现在屏幕上。 你甚至可以指定一个选项窗格中放入一个内部框架 ( JInternalFrame
,而不是一个) JDialog
。
当您创建一个JOptionPane
,外观和感觉特定的代码添加组件JOptionPane
JOptionPane,并确定这些组件的布局。
JOptionPane
的图标支持,可以让你轻松指定的对话框显示的图标。 您可以使用一个自定义图标,没有图标,或四种标准的任何JOptionPane
JOptionPane图标的问题,信息,警告和错误。 每个外观和感觉,自己的四个标准图标版本。 下图显示了在Java(和Windows)的外观和感觉使用的图标。
图标说明 | Java的外观和感觉 | Windows外观 |
---|---|---|
问题 | ||
信息 | ||
警告 | ||
错误 |
创建和显示简单的对话框
对于最简单的模式对话框,您可以创建和显示对话框使用JOptionPane
的show Xxx Dialog
的方法之一。 如果您的对话应该是一个内部框架 ,然后添加Internal
后show
-例如, showMessageDialog
变化showInternalMessageDialog
。 如果您需要控制对话窗口关闭行为,或者,如果你不想对话框模式,那么你应该直接JOptionPane
JOptionPane并把它添加到JDialog
JDialog实例。 然后调用setVisible(true)
JDialog
使它出现。
两个最有用show Xxx Dialog
对话框的showMessageDialog
showMessageDialog showOptionDialog
showOptionDialog 。 showMessageDialog
方法显示一个简单的,一个按钮的对话框。 showOptionDialog
方法显示自定义的对话框-定制的按钮上的文字,它可以显示各种按钮,可以包含一个标准的文本消息或组件的集合。
另外两个show Xxx Dialog
的方法是使用较少。 showConfirmDialog
方法要求用户确认的东西,但提出了标准的按钮上的文字,而不是定制用户的情况(启动/取消,例如)按钮上的文字(是/否或本地化的等效例如,)。第四种方法, showInputDialog
,目的是为了显示一个模式对话框,从用户获取一个字符串,使用一个文本字段,一个不可编辑的组合框或列表。
下面是一些例子,从采取DialogDemo.java
,使用showMessageDialog
, showOptionDialog
的JOptionPane
构造。对于更多的示例代码, DialogDemo.java
参阅DialogDemo.java中列出的其他程序使用对话框的例子。
-
显示一个模式对话框的一个按钮,这是标有“确定”(或本地化的等效)。 您可以轻松地指定的消息,图标和标题对话框显示。 下面是使用一些例子
showMessageDialog
:/ /默认的标题和图标 JOptionPane.showMessageDialog(帧, “鸡蛋不应该是绿色的。”);
/ /自定义标题,警告图标 JOptionPane.showMessageDialog(帧, “鸡蛋不应该是绿色的。” “空洞的警告”, JOptionPane.WARNING_MESSAGE);
/ /自定义标题,错误图标 JOptionPane.showMessageDialog(帧, “鸡蛋不应该是绿色的。” “空洞的错误”, JOptionPane.ERROR_MESSAGE);
/ /自定义标题,没有图标 JOptionPane.showMessageDialog(帧, “鸡蛋不应该是绿色的。” “一个普通的消息”, JOptionPane.PLAIN_MESSAGE);
/ /自定义标题,自定义图标 JOptionPane.showMessageDialog(帧, “鸡蛋不应该是绿色的。” “空洞的自定义对话框” JOptionPane.INFORMATION_MESSAGE, 图标);
-
显示一个模态对话框指定的按钮,图标,消息,标题,等。 使用这种方法,可以改变标准对话框按钮显示的文字。 您还可以执行许多其他类型的定制。
/ /自定义按钮文本 对象[]选项= {“是的,请” “不,谢谢”, “没有鸡蛋,没有火腿!”}; INT N = JOptionPane.showOptionDialog(帧, “你愿意去一些绿色鸡蛋” +“火腿吗?” “一个愚蠢的问题”, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, 空, 选项, 选项[2]);
-
创建一个
JOptionPane
指定的按钮,图标,消息,标题,等。 然后,您必须添加一个JDialog
的选项窗格,选项窗格上的注册的属性更改侦听,并显示对话框。 有关详细信息,请参阅 停止自动对话闭幕 。最后JOptionPane optionPane =新JOptionPane( “只有这样,才能关闭这个对话框是\ N” “按下面的按钮之一。\ N” “你懂吗?” JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION);
showMessageDialog
showOptionDialog
JOptionPane
(构造函数)
所有的show Xxx Dialog
“的方法JOptionPane
JOptionPane构造是标准化的,虽然每个方法和构造函数的参数的数目不同。 以下列表描述了每个参数。 要查看一个特定的方法的参数的确切名单, 看到对话框 API 。
-
每个
show Xxx Dialog
的方法的第一个参数始终是父组件,它必须是一个框架,一个框架内的一个组成部分,或者为null。 如果您指定的Frame或Dialog,那么该对话框将出现在画面中心,并按照该框架中的焦点行为。 如果你指定一个框架内的一个组成部分,那么该对话框将出现在该组件的中心,并会跟进的该组件的框架的重点行为。 如果指定 为null,然后将挑选的外观和感觉为一个适当的位置“对话框-一般屏幕的中心-对话框不一定会遵循的任何可见的Frame或Dialog的重点行为。JOptionPane
构造函数不包括这种说法。 相反,你指定的父框架,当您JDialog
JDialog,JOptionPane
JOptionPane,您JDialog setLocationRelativeTo
setLocationRelativeTo方法来设置对话框的位置。 -
这需要一个参数指定对话框要显示在其主要领域。 一般来说,你指定一个字符串,结果在对话框中显示一个具有指定文本标签。 几行,您可以拆分的消息把换行符
\n
N)内消息字符串字符。 例如:“完成了一句:\ N \”绿色鸡蛋... ... \“”
- 对话框的标题。
-
指定的设置按钮,在对话框的底部出现。 请从以下标准集之一:
DEFAULT_OPTION
,YES_NO_OPTION
,YES_NO_CANCEL_OPTION
,OK_CANCEL_OPTION
。 -
这个参数决定在对话框中显示的图标。 请从下列值之一:
PLAIN_MESSAGE
(无图标),ERROR_MESSAGE
,INFORMATION_MESSAGE
,WARNING_MESSAGE
,QUESTION_MESSAGE
。 - 在对话框中显示的图标。
- 一般用来指定在对话框底部的每个按钮上显示的字符串。 在一个标准的对话框中自定义按钮文本的更多信息。 也可用于指定要显示的图标的按钮或按钮组件被添加到该按钮行。
- 指定被选中的默认值。
Component parentComponent
Object message
String title
int optionType
int messageType
Icon icon
Object[] options
Object initialValue
您可以让选项“窗格中显示其默认的图标,或指定使用的消息类型图标或图标参数。 默认情况下,一个选项窗格创建showMessageDialog
显示信息的图标,与showConfirmDialog
showConfirmDialog showInputDialog
showInputDialog显示问号图标,并与创建了JOptionPane
JOptionPane构造函数不显示任何图标。 要指定对话框中显示一个标准的图标或没有图标,指定消息类型对应的图标,你的愿望。 要指定一个自定义图标,使用的图标参数。 该图标参数优先接管的消息类型,只要图标参数有一个非空值,对话框显示指定的图标。
自定义按钮文本
当您使用JOptionPane
创建一个对话框,你可以使用标准的按钮上的文字(这看起来可能会有所不同,感觉和语言环境),或指定不同的文本。 默认情况下,选项窗格类型确定按钮出现多少。 例如, YES_NO_OPTION
对话框有两个按钮, YES_NO_CANCEL_OPTION
对话框中有三个按钮。
下面的代码,从采取DialogDemo.java
,创建两个是/否对话框。 第一个对话框是实施showConfirmDialog
,使用这两个按钮的外观和感觉措辞。 第二个对话框使用showOptionDialog
所以它可以自定义的措辞。 措辞变化异常,对话框是相同的。
/ /默认的图标,自定义标题 INT ñ = JOptionPane.showConfirmDialog( 帧, “你喜欢绿色的蛋和火腿吗?” “空洞的问题”, JOptionPane.YES_NO_OPTION); | |
对象[]选项= {“是的,请” “没办法!”}; INT N = JOptionPane.showOptionDialog(帧, “你喜欢绿色的蛋和火腿吗?” “一个愚蠢的问题”, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, NULL,/ /不使用自定义图标 选项,/ /标题的按钮 选项[0]); / /默认按钮标题 |
正如前面的代码片段显示, showMessageDialog
, showConfirmDialog
,并showOptionDialog
方法返回一个整数,指示用户的选择。 这个整数的值YES_OPTION
, NO_OPTION
, CANCEL_OPTION
, OK_OPTION
和CLOSED_OPTION
。 除CLOSED_OPTION
,每个选项对应于用户按下按钮。 返回CLOSED_OPTION
时,它表示,用户关闭对话窗口明确,选择里面的选项窗格中的一个按钮,而不是。
即使你改变标准对话框按钮显示的字符串,返回值仍然是一个预先定义的整数。 例如,一个YES_NO_OPTION
对话框总是返回下列值之一: YES_OPTION
, NO_OPTION
,或CLOSED_OPTION
。
从对话框获取用户输入的
show Xxx Dialog
showInputDialog
的唯一形式Object
show Xxx Dialog
,不返回一个整数,它返回一个Object
而不是。 这个Object
通常是一个String
,它反映了用户的选择。 下面是使用的showInputDialog
showInputDialog创建一个对话框,让用户选择三个字符串之一:
Object []对象的可能性= {“火腿”,“垃圾邮件”,“山药”}; 字符串S =(字符串)JOptionPane.showInputDialog( 帧, “完成句子:\ N” +“\”绿色鸡蛋... ... \“”, “定制对话框”, JOptionPane.PLAIN_MESSAGE, 图标, 的可能性, “火腿”); / /如果返回了一个字符串,这样说。 ((S = NULL)&&(s.length()> 0)){ setLabel(“绿鸡蛋和... ...”+ S + "!"); 回报; } / /如果你在这里,返回值是空/空。 setLabel(“来吧,说完这句话!”);
,如果你不小心限制用户的选择,你可以使用的showInputDialog
showInputDialog方法,花费更少的参数null
指定为null的对象数组。 在Java的外观和感觉,而代以null
possibilities
结果在一个对话框,有一个文本字段,看起来像这样:
因为用户可以在文本字段中键入任何东西,你可能要检查返回值,并要求用户再次尝试,如果它是无效的的。 另一种方法是创建一个自定义对话框中验证用户输入的数据,它返回之前。 参见CustomDialog.java
验证数据的一个例子。
如果你正在设计一个自定义对话框,你需要设计你的对话框的API,让你可以查询哪些用户选择对话框。 例如, CustomDialog
有getValidatedText
的方法,返回用户输入的文本。
停止自动对话闭幕
默认情况下,当用户点击一个JOptionPane
创建按钮,关闭对话框。 但如果你想关闭对话框前检查用户的答案? 在这种情况下,您必须实现自己的属性更改侦听器,这样,当用户点击一个按钮,对话框不会自动关闭。
DialogDemo
包含两个对话框实现属性更改侦听。 这些对话框之一,是一个自定义模式对话框,在CustomDialog
CustomDialog, JOptionPane
JOptionPane得到的标准图标和布局援助。 其他对话,其代码如下,使用一个标准是/否JOptionPane
。 虽然这个对话框是相当无用的书面的,它的代码是很简单的,您可以使用它作为一个更复杂的对话框的模板。
除了 设置的属性更改侦听,下面的代码也调用JDialog
的setDefaultCloseOperation
方法,并实现了一个窗口监听器,正确处理窗口关闭尝试。 如果你不介意当用户关闭窗口明确通知,然后忽略了大胆的代码。
最后JOptionPane optionPane =新JOptionPane( “只有这样,才能关闭这个对话框是\ N” “按下面的按钮之一。\ N” “你懂吗?” JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_NO_OPTION); 最后的JDialog对话框=新的JDialog(帧, “按一下按钮”, TRUE); dialog.setContentPane(optionPane); dialog.setDefaultCloseOperation( JDialog.DO_NOTHING_ON_CLOSE); dialog.addWindowListener(新WindowAdapter(){ 公共无效windowClosing(WindowEvent我们){ setLabel(“挫败用户试图关闭窗口”); } }); optionPane.addPropertyChangeListener( 新的PropertyChangeListener(){ 公共无效的propertyChange(PropertyChangeEvent E){ 弦乐托= e.getPropertyName(); 如果(dialog.isVisible() &&(e.getSource()== optionPane) &&(prop.equals(JOptionPane.VALUE_PROPERTY))){ / /如果你要检查的东西 / /关闭窗口之前,你会怎么做 / /这里。 dialog.setVisible(假); } } }); dialog.pack(); dialog.setVisible(TRUE); int值=((Integer)的optionPane.getValue())intValue(); (值== JOptionPane.YES_OPTION){ setLabel(“好。”); 代码} else if(值== JOptionPane.NO_OPTION){ setLabel(“尝试使用窗口装饰” +“关闭非自动关闭对话框。” +“你不能!”); }
对话框API
下表列出了常用JOptionPane
JOptionPane JDialog
JDialog的构造器和方法。 你很可能会调用的其他方法Dialog
Window
窗口Component
类, pack
包setSize
setSize setVisible
setVisible 。
API是列如下:
方法或构造 | 目的 |
---|---|
JOptionPane() JOptionPane(对象) JOptionPane(对象,INT) JOptionPane(对象,INT,INT) JOptionPane(对象,INT,INT,图标) JOptionPane(对象,INT,INT,图标,对象[]) JOptionPane(对象,INT,INT,图标,对象,对象) | 创建一个JOptionPane 实例。 请参阅创建和显示简单的对话框参数及其影响的讨论。 |
静帧getFrameForComponent(组件) 静态JDesktopPane getDesktopPaneForComponent(组件) | 手持JOptionPane 类的方法, 找到帧或桌面窗格中,分别指定组件英寸 |
INT getMaxCharactersPerLineCount() | 确定换行会自动插入选项窗格中的文本。 (默认值是Integer.MAX_VALUE 。)要使用此方法,你必须创建一个JOptionPane 子类。 例如,下面的代码在同一个字,每行的选项窗格中,由于字符串中的每个字是5个字符或更少的事实结果:
JOptionPane OP =新JOptionPane(“这是文本。”){ 公共INT getMaxCharactersPerLineCount(){ 返回5; } }; |
使用对话框的例子
此表列出了使用JOptionPane
JDialog
的例子, 。 为了找到使用对话框中的其他例子,看到的例子列出进度条,颜色选择器和文件挑肥拣瘦。
范例 | 凡形容 | 注释 |
---|---|---|
DialogDemo , CustomDialog | 本节 | 建立多种对话,使用JOptionPane JDialog JDialog 。 |
Framework | - | 弹出一个确认对话框,当用户选择退出菜单项。 |
ListDialog | 如何使用BoxLayout | 实现一个模态对话框,其中包含一个滚动列表和两个按钮。 不使用JOptionPane ,除getFrameForComponent 的实用方法。 |