2012年计算机二级Java对话框学习教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.6 对话框
到目前为止,我们所介绍的每个用户界面组件都出现在应用程序创建的一个框架窗口中。
但有时候我们需要弹出独立的对话框以显示信息或者从用户收集信息。
对话框,顾名思义,就是向用户显示信息并获取程序继续运行所需数据的窗口,可以起到与用户交互的作用。
从本质上讲,对话框时一种特殊的窗体,它通过一个或多个组件与用户交互。
与JFrame一样,对话框有边框、有标题且独立存在的容器,并且不能被其他容器所包容,但是对话框不能作为程序的最外层容器,也不能保护菜单栏。
此外,java中的对话框上没有最大、最小化按钮。
8.6.1 JOptionPane 选项对话框
JOptionPane提供了许多对话框样式,该类能够让你在不编写任何专门对话框代码的情况下弹出一个简单的对话框。
JOptionPane类提供了7个构造方法用于创建JOptionPane的类对象,不过在实际使用时,
通常不是用new方式创建,而是使用JOptionPane类提供的一些静态方法产生。
JOptionPane有四个静态方法来显示这些简单对话框:
(1)showMessageDialog:提示信息对话框,这种对话框通常只含有一个“确定”按钮。
(2)showConfirmDialog :确认对话框,这类对话框通常会询问用户一个问题,要求用户做YES/NO 的回答。
(3)showOptionDialog:选择对话框,这类对话框可以让用户自己定义对话框的类型。
(4)showInputDialog:输入对话框,这类对话框可以让用户输入相关的信息,当用户完成输入并按下确定按钮后,系统会得到用户所输入的信息。
对于每种形式的对话框都有多个静态重载方法,下面分别予以说明。
1.Message Dialog
Message Dialog称为提示信息对话框,这种对话框中通常只含有一个“确定”按钮。
可以使用showMessage Dialog静态方法来显示一个Message Dialog,showMessageDialog方法具有如下重载形式。
·showMessageDialog(Component parentComponent, Object message)
·showMessageDialog(Component parentComponent, Object message, String title, int messageType)
·showMessageDialog(Component parentComponent, Object message, String title, int messageType, Icon icon)
各参数的含义如下:
parentComponent - 确定在其中显示对话框的Frame;如果为null 或者其不具有Frame,则使用默认的Frame
message - 要显示的Object
title - 对话框的标题字符串
messageType - 要显示的消息类型,int枚举类型:ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE 或PLAIN_MESSAGE,这5个值都是JOptionPane的静态数据成员,可直接使用JOptionPane加“.”的方式使用,5个消息类型的显示效果如下表
图8-14 messageType显示效果
icon - 要在对话框中显示的图标,该图标是用户自定义的图标,如果显示该图标,则不会再显示
messageType指定的消息类型的系统图标。
一般不需要使用,除非用户有特定需求。
showMessageDialog方法无返回值,Message Dialog只是告知用户某些信息,用户除了点击确定按钮外不能与其进行交互。
一个典型的Message Dialog的显示效果见下图
图8-12 典型Message Dialog显示效果
对应语句:
JOptionPane.showMessageDialog(null, "这是一个消息对话框吗?","对话框title",JOptionPane.QUESTION_MESSAGE,null);
2.ConfirmDialog
Confirm Dialog称为确认对话框,这类对话框通常会询问用户一个问题,要求用户作出YES/NO的回答。
可以使用showConfirmDialog静态方法来显示一个Confirm Dialog,showConfirmDialog方法具有如下重载形式。
showConfirmDialog(Component parentComponent, Object message)
showConfirmDialog(Component parentComponent, Object message, String title, int optionType) showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType)
showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon)
showConfirmDialog方法中有6个参数,其中5个与showMessageDialog的参数相同,含义也一样,这里不再重复说明,showConfirmDialog方法中新增一个参数optionType,该参数的含义如下:optionType—指定可用于对话框的选项的int:YES_NO_OPTION、YES_NO_CANCEL_OPTION 或OK_CANCEL_OPTION,具体的显示效果见下表
表8-15 optionType显示效果
showConfirmDialog的返回值为int类型。
其中YES,OK=0;NO=1;CANCEL=2;CLOSED=-1(用户直接点击关闭按钮关闭对话框)。
通过对返回值的判断,可以做到与用户之间的交互(如用户是按下了确定按钮还是取消按钮,根据按下按钮的不同做不同的处理)
下面是一个典型的Confirm Dialog的显示效果。
图8-13典型Confirm Dialog显示效果
对应语句:JOptionPane.showConfirmDialog(null, "你确认这是一个确认对话框吗?","对话框title",JOptionPane.YES_NO_OPTION);
3.Input Dialog
Input Dialog称为输入对话框,这类对话框可以让用户输入相关的信息,当用户完成输入并按下确定按钮后,系统会得到用户所输入的信息。
输入对话框不见可以让用户自行输入数据,也可以提供ComboBox 组件让用户选择相关信息,避免用户输入错误。
可以使用showInputDialog静态方法来显示一个Input Dialog,showInputDialog方法具有如下重载形式。
showInputDialog(Object message)
showInputDialog(Object message, Object initialSelectionValue)
showInputDialog(Component parentComponent, Object message)
showInputDialog(Component parentComponent,Object message, Object initialSelectionValue) showInputDialog(Component parentComponent, Object message, String title, int messageType) showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue)
showInputDialog方法中有7个参数,其中5个与showMessageDialog的参数相同,含义也一样,这里不再重复说明,showInputDialog方法中新增两个参数,selectionValues 和initialSelectionValue,含义如下:
selectionValues—用户可能的选择值,以数组方式赋值,显示形式为ComboBox。
initialSelectionValue—对话框初始化时输入框中的显示值。
showInputDialog方法的返回值有两种:String类型和Object类型,当用户按下确定按钮时会返回用户输入(或选择)的信息,若按下取消按钮则会返回null。
下面是一个典型的Input Dialog的显示效果。
图8-14典型Input Dialog显示效果
对应语句:
JOptionPane.showInputDialog(null ,"请选择城市:","对话框title", RMATION_MESSAGE,null,new String[]{"北京","上海","广州","天津"},"北京");
4.Option Dialog
Option Dialog称为选择对话框,这类对话框可以让用户自己定义对话框的类型。
它可以根据需要改变
按钮上的文字,而不是系统默认的“确定”、“取消”、“是”、“否”等。
可以使用showOptionDialog静态方法来显示一个Option Dialog,该静态方法无重载方法,具体形式如下:
showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue)
该方法提供了8个参数,其中7个参数与showInputDialog的参数完全相同,不再重复说明,新增一个参数options,其含义如下:
options—按钮上的文字,系统会根据options的长度n创建n个按钮。
showOptionDialog的返回值类型为int,当点击由options数组确定的按钮时,其值为options数组的下标值,当点击关闭按钮时其值为-1。
下面是一个典型的Option Dialog的显示效果。
图8-15典型Option Dialog显示效果
对应语句:
JOptionPane.showOptionDialog(null, "选项对话框", "对话框title", JOptionPane.YES_NO_OPTION, RMATION_MESSAGE, null,new String[]{"自定义1","自定义2","自定义3"},"自定义1");
当点击“自定义1”按钮时,返回值为0,“自定义2”按钮时,返回值为1,“自定义2”按钮时,返回值为2,点击取消按钮时返回值为-1 [page]
下面的例子综合了JOptionPane的四种按钮,并对各个按钮的单击事件做了处理。
[例8-11]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class JOptionPaneTest extends JFrame{
private JButton btn1 = new JButton("消息对话框");
private JButton btn2 = new JButton("确认对话框");
private JButton btn3 = new JButton("输入对话框");
private JButton btn4 = new JButton("选项对话框");
public JOptionPaneTest(String title){
super(title);
Container contentPane = this.getContentPane();
contentPane.setLayout(new FlowLayout(5));
//添加按钮
contentPane.add(btn1);
contentPane.add(btn2);
contentPane.add(btn3);
contentPane.add(btn4);
pack();
setVisible(true);
//注册监听器
btn1.addActionListener(new MyActionListener());
btn2.addActionListener(new MyActionListener());
btn3.addActionListener(new MyActionListener());
btn4.addActionListener(new MyActionListener());
}
//监听器
private class MyActionListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
int n;//用于接收对话框的int类型返回值
String str = new String();//用于接收对话框的String类型返回值
//处理"消息对话框"按钮
if(e.getActionCommand().equals("消息对话框")){
//显示一个MessageDialog
JOptionPane.showMessageDialog(null, "这是一个消息对话框吗?");
}
if(e.getActionCommand().equals("确认对话框")){
//显示一个ConfirmDialog,并用变量n接收其返回值
n=JOptionPane.showConfirmDialog(null, "你确认这是一个确认对话框吗?","对话框title",JOptionPane.YES_NO_OPTION);
//判断用户点击了哪个按钮
switch(n){
case 0:
JOptionPane.showMessageDialog(null, "您点击了按钮——是");
break;
case 1:
JOptionPane.showMessageDialog(null, "您点击了按钮——否");
break;
case -1:
JOptionPane.showMessageDialog(null, "您点击了退出按钮");
break;
}
}
if(e.getActionCommand().equals("输入对话框")){
//显示一个InputDialog,并用变量str接收其返回值
str =(String)JOptionPane.showInputDialog(null ,"请选择城市:","对话框title",RMATION_MESSAGE,null,new String[]{"北京","上海","广州"},"北京");
//判断用户选择了ComboBox的哪项
if(str != null){
JOptionPane.showMessageDialog(null, "您选择了"+str);
}
}
if(e.getActionCommand().equals("选项对话框")){
//显示一个OptionDialog,并用变量n接收其返回值
n = JOptionPane.showOptionDialog(null, "选项对话框", "对话框title", JOptionPane.YES_NO_OPTION, RMATION_MESSAGE, null,new String[]{"自定义1","自定义2","自定义3"},"自定义1");
//判断用户点击了哪个按钮
switch(n){
case 0:
JOptionPane.showMessageDialog(null, "您点击了按钮——自定义1");
break;
case 1:
JOptionPane.showMessageDialog(null, "您点击了按钮——自定义2");
break;
case 2:
JOptionPane.showMessageDialog(null, "您点击了按钮——自定义3");
break;
case -1:
JOptionPane.showMessageDialog(null, "您点击了退出按钮");
break;
}
}
}
}
}
public class Test8_11 {
public static void main(String[] args) {
new JOptionPaneTest("JOptionPane四种对话框形式测试");
}
}
该程序是对四种按钮的各个单击事件进行处理,所以运行结果较多,这里不再一一列举,请读者自行运行程序查看结果。
[page]
8.6.2 JFileChooser 文件对话框
JFileChooser表示文件对话框,常用来弹出“打开”、“保存”后其他自定标题的文件对话框,并可爱对话框中进行文件选择。
JFileChooser类提供了6个构造方法用于创建JFileChooser类对象,常用的有3个,详见下表。
表8-16 JFileChooser常用构造方法
构造方法说明
JFileChooser() 构造一个指向用户默认目录的JFileChooser。
JFileChooser(String currentDirectoryPath) 构造一个使用给定路径的JFileChooser。
JFileChooser(File currentDirectory) 使用给定的File 作为路径来构造一个JFileChooser
此默认目录取决于操作系统。
在Windows 上通常是“我的文档”,在Unix 上是用户的主目录。
无参构造方法创建的JFileChooser类对象,其默认目录默认目录取决于操作系统。
在Windows 上通常是“我的文档”,在Unix 上是用户的主目录。
另外两个构造方法,虽然传递参数的类型不同,但均指某个目录。
若参数传递时传入“null”,则相当于使用“JFileChooser()”创建JFileChooser类对象。
JFileChooser类中常用方法如下表。
表8-17 JFileChooser常用方法
成员方法说明
int showOpenDialog(Component parent) 弹出一个"Open File" 文件选择器对话框
int showSaveDialog(Component parent) 弹出一个"Save File" 文件选择器对话框
showDialog(Component parent, String approveButtonText) 弹出具有自定义approve 按钮的自定义文件选择器对话框
File getSelectedFile() 返回选中的文件
对于showOpenDialog等显示对话框的方法将返回一个整数,可能取值情况是:
JFileChooser.CANCEL_OPTION —按取消键退出对话框,无文件选取
JFileChooser.APPROVE_OPTION —正常选取文件
JFileChooser.ERROR_OPTION —发生错误或者该对话框已被解除而退出对话框
所以在文件选取对话框交互结束后,应进行判断,是否从对话框中选取了文件,然后根据返回值情况进行处理。
例8-12演示了JFileChooser类的showOpenDialog方法的使用,JFileChooser一般用于可视化的文件读取及保存,本例只是将读取的文件名显示出来,对于进一步的文件读取及保存工作读者可在学习了I/O 流后完善本实例。
[例8-12]
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class JFileChooserTest extends JFrame{
private JLabel label = new JLabel("所选文件路径:");
private JTextField tfFileName = new JTextField(25);
private JButton btnOpen = new JButton("浏览");
public JFileChooserTest(String title){
super(title);
Container contentPane = this.getContentPane();
contentPane.setLayout(new FlowLayout(5));
contentPane.add(label);
contentPane.add(tfFileName);
contentPane.add(btnOpen);
pack();
setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//监听btnOpen按钮
btnOpen.addActionListener(new MyActionListener());
}
//Action事件处理
private class MyActionListener implements ActionListener{ public void actionPerformed(ActionEvent arg0) { JFileChooser fc = new JFileChooser("D:\\javaPro");
int val = fc.showOpenDialog(null);//文件打开对话框
if(val==fc.APPROVE_OPTION){//正常选择文件tfFileName.setText(fc.getSelectedFile().toString());
}
else{//未正常选择文件,如选择取消按钮
tfFileName.setText("未选取文件");
}
}
}
}
public class Test8_12 {
public static void main(String[] args) {
new JFileChooserTest("JFileChooser测试");
}
}
程序运行结果。