Java知多少(91)对话框

时间:2022-09-03 11:37:22

对话框是为了人机对话过程提供交互模式的工具。应用程序通过对话框,或给用户提供信息,或从用户获得信息。对话框是一个临时窗口,可以在其中放置用于得到用户输入的控件。在Swing中,有两个对话框类,它们是JDialog类和JOptionPane类。JDialog类提供构造并管理通用对话框;JOptionPane类给一些常见的对话框提供许多便于使用的选项,例如,简单的“yes-no”对话框等。

JDialog类

JDialog类作作对话框的基类。对话框与一般窗口不同,对话框依赖其他窗口,当它所依赖的窗口消失或最小化时,对话框也将消失;窗口还原时,对话框又会自动恢复。

对话框分为强制和非强制两种。强制型对话框不能中断对话过程,直至对话框结束,才让程序响应对话框以外的事件。非强制型对话框可以中断对话过程,去响应对话框以外的事件。强制型也称有模式对话框,非强制对话框也称非模式对话框。

JDialog对象也是一种容器,因此也可以给JDialog对话框指派布局管理器,对话框的默认布局为BoarderLayout布局。但组件不能直接加到对话框中,对话框也包含一个内容面板,应当把组件加到JDialog对象的内容面板中。由于对话框依赖窗口,因此要建立对话框,必须先要创建一个窗口。

JDialog类常用的构造方法有3个:

  • JDialog(),构造一个初始化不可见的非强制型对话框。
  • JDialog(JFramef,String s),构造一个初始化不可见的非强制型对话框,参数f设置对话框所依赖的窗口,参数s用于设置标题。通常先声明一个JDialog类的子类,然后创建这个子类的一个对象,就建立了一个对话框。
  • JDialog(JFrame f,String s,boolean b),构造一个标题为s,初始化不可见的对话框。参数f设置对话框所依赖的窗口,参数b决定对话框是否强制或非强制型。

JDialog类的其他常用方法有以下几个:

  • getTitle(),获取对话框的标题。
  • setTitle(String s),设置对话框的标题。
  • setModal(boolean b),设置对话框的模式。
  • setSize(),设置框的大小。
  • setVisible(boolean b),显示或隐藏对话框。

【例 11-16】小应用程序声明一个用户窗口类和对话框类,用户窗口有两个按钮和两个文本框,当点击某个按钮时,对应的对话框被激活。在对话框中输入相应信息,按对话框的确定按钮。确定按钮的监视方法,将对话框中输入的信息传送给用户窗口,并在用户窗口的相应文本框中显示选择信息。

 import java.applet.*
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyWindow extends JFrame implements ActionListener{
private JButton button1,button2;
private static int flg=0;
private static JTextField text1,text2;
Mywindow(String s){
super(s);
Container con = this.getContentPane();
con.setLayout(new GridLayout(2,2));
this.setSize(200,100);
this setLocation(100,100);
button1 = new JButton("选择水果");
button2 = new JButton("选择食品");
button1.addActionListener(this);
button2.addActionListener(this);
text1 = new JTextField(20);
text2 = new JTextField(20);
con.add(button1);
con.add(button2);
con.add(text1);
con.add(text2);
this.setVisible(true);
this.pack();
}
public static void returnName(String s){
if(flg ==1)
text1.setText("选择的水果是:"+s);
else if(flg == 2)
text2.setText("选择的食品是:"+s);
}
public void actionPerformed(ActionEvent e){
MyDialog dialog;
if(e.getSource()==button1){
dialog = new MyDialog(this,"水果");
dialog.setVisible(true);
flg =1;
}
else if(e.getSource()==button2){
dialog =new MyDialog(this,"食品");
dialog.setVisible(true);
flg=2;
}
}
}
class MyDialog extends JDialog implements ActionListener{
JLabel title;
JTextField text;
JButton done;
Mydialog(JFrame F,String s){
super(F,s,true);//模态
Container con = this.getContentPane();
title = new JLabel("输入"+s+"名称");
text = new JTextField(10);
text.setEditable(true);
con.setLayout(new FlowLayout());
con.setSize(200,100);
setModal(false);
done = new JButton("确定");
done.addActionListener(this);
con.setVisible(true);
this.pack();
}
public void actionPerformed(ActionEvent e){
MyWindow.returnName(text.getText());
setVisible(false);
dispose();
}
}
public class Example6_6 extends Applet{
MyWindow window;
MyDialog dialog;
public void init(){
window = new MyWindow("带对话框窗口");
}
}

上述例子创建的是强制型对话框,改为非强制型对话框就允许用户在对话过程中暂停,与程序的其他部分进行交互。这样,在界面中可以看到部分对话的效果。

将上述例子改为非强制型对话框只要作少量的改动即可。首先是将对话框构造方法中的代码“super(F,s,true);”改为 “super(F,s,false);”。

第二个变化:原来是响应确定按钮事件时,才调用方法returnName(),将对话框得到的字符串返回给程序。现在当文本框输入选择字符串结束后,就应该立即调用该方法。为此,需要对文本框的输入事件作监视,为文本注册监视器:

 public void actionPerformed(ActionEvent e){
if(e.getSource()==text){
MyWindow.returnName(text.getText());
}
else if(e.getSource()==done){
MyWindow.returnName(text.getText());
setVisible(false);
dispose();//清除资源
}
}

JOptionPane类

经常遇到非常简单的对话情况,为了简化常见对话框的编程,JOptionPane类定义了四个简单对话框类型,参见表11-4。JOptionPane类提供一组静态方法,让用户选用某种类型的对话框。下面的代码是选用确认对话框:
    int result = JOptionPane.showConfirmDialog(parent,“确实要退出吗”, “退出确认“,JOptionPane.YES_NO_CANCEL_OPTION);
其中方法名的中间部分文字“Confirm”是创建对话框的类型,文字Confirm指明是选用确认对话框。将文字Confirm改为另外三种类型的某一个,就成为相应类型的对话框。上述代码的四个参数的意义是:第一个参数指定这个对话框的父窗口;第二个参数是对话框显示的文字;第三个参数是对话框的标题;最后一个参数指明对话框有三个按钮,分别为“是(Y)”,“否(N)”,和“撤销”。方法的返回结果是用户响应了这个对话框后的结果,参见表 11-5 给出的可能答案。

输入对话框以列表或文本框形式请求用户输入选择信息,用户可以从列表中选择选项或从文本框中输入信息。以下是一个从列表中选择运行项目的输入对话框的示意代码:
    String result = (String)JOptionPane.showInputDialog(parent,
        “请选择一项运动项目”, “这是运动项目选择对话框”,
        JOptionPane.QUESTION_MESSAGE,null,
        new Object[]{“踢足球“,“打篮球”,“跑步”,“跳绳”},“跑步”);
第四个参数是信息类型,参见11-6,第五个参数在这里没有特别的作用,总是用null;第六个参数定义了一个供选择的字符串数组,第七个参数是选择的默认值。对话框还包括“确定”和“撤销”按钮。

表11-4 JOptionPane对话框类型
输入 通过文本框、列表或其他手段输入,另有“确定”和“撤销”按钮
确认 提出一个问题,待用户确认,另有“是(Y)”、“否(N)”和“撤销”按钮
信息 显示一条简单的信息,另有“确定”和“撤销”按钮
选项 显示一列供用户选择的选项
表 11-5  由 JOptionPane 对话框返回的结果
YES_OPTION 用户按了“是(Y)”按钮
NO_OPTION 用户按了“否(N)”按钮
CANCEL_OPTION 用户按了“撤销”按钮
OK_OPTION 用户按了“确定”按钮
CLOSED_OPTION 用户没按任何按钮,关闭对话框窗口
表 11-6 JOptionPane 对话框的信息类型选项
PLAIN_MESSAGE 不包括任何图标
WARNING_MESSAGE 包括一个警告图标
QUESTION_MESSAGE 包括一个问题图标
INFORMATIN_MESSAGE 包括一个信息图标
ERROR_MESSAGE 包括一个出错图标

有时,程序只是简单地输出一些信息,并不要求用户有反馈。这样的对话框可用以下形式的代码创建:
    JOptionPane.showMessageDialog(parent, “这是一个Java程序”,
        “我是输出信息对话框”,JOptionPane.PLAIN_MESSAGE);
上述代码中前三参数的意义与前面所述相同,最后参数是指定信息类型为不包括任何图标,参见表11-6。

系列文章:

Java知多少(91)对话框的更多相关文章

  1. Java知多少(完结篇)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  2. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  3. Java知多少(112)数据库之删除记录

    删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...

  4. Java知多少(111)数据库之修改记录

    修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是:    update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...

  5. Java知多少(110)数据库之插入记录

    插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...

  6. Java知多少(109)数据库更新

    数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...

  7. Java知多少(108)数据库查询简介

    利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...

  8. Java知多少(107)几个重要的java数据库访问类和接口

    编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...

  9. Java知多少(106)程序与数据库连接

    一个网络关系数据库应用系统是一个三层次结构.客户机与服务器采用网络连接,客户机端应用程序按通信协议与服务器端的数据库程序通信:数据库服务程序通过SQL命令与数据库管理系统通信. Java程序与数据库连 ...

随机推荐

  1. 网页端打开手机上的app

    iOS/Android 浏览器(h5)及微信中唤起本地APP 在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这 ...

  2. JavaScript slice() 方法

    JavaScript slice() 方法  JavaScript Array 对象 实例 在数组中读取元素: var fruits = ["Banana", "Oran ...

  3. Flapper Bird的学习笔记(三)

    因为我有一个超屌的梦想,所以就绝不会做一个孬种的追梦人! 完成音效的添加 单例模式 游戏的状态切换 1. 单例模式 首先呢,说一下单例模式.何为单例?单例模式是一种常用的软件设计模式.在它的核心结构中 ...

  4. c++编译错误提示及解决

    IntelliSense: #error 指令: Please use the /MD switch for _AFXDLL builds 修改设置:工程(Project)-> 属性(Prope ...

  5. SNF开发平台WinForm之十三-单独从服务器上获取PDF文件进行显示-SNF快速开发平台3.3-Spring.Net.Framework

    1运行效果: 2开发实现: 如果需要单独显示PDF文件时用下面代码去实现,指定url地址. 地址: . 获取附件管理的实体对象: List<KeyValuePair<string, obj ...

  6. android waiting for debugger

    在Studio开发环境中,使用真机开发经常会出现waiting for debugger,卡死不动了,让人很崩溃啊,现在我就总结下几种解决方法,希望能帮到出现同样情况的朋友! 问题出现及解决办法: 多 ...

  7. SQL Server -SET ANSI&lowbar;NULLS

    当ANSI_NULLS 为ON时,遵循SQL92的标准,只能使用IS NULL 来判断值是否为NULL, 而不能使用=或<>来与NULL做比较,任何值包括NULL值与NULL值做=或&lt ...

  8. Windows Phone开发(44):推送通知第二集——磁贴通知

    原文:Windows Phone开发(44):推送通知第二集--磁贴通知 前面我们说了第一个类型--Toast通知,这玩意儿不知大家是不是觉得很新鲜,以前玩.NET编程应该没接触过吧? 其实这东西绝对 ...

  9. 老李推荐:第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

    老李推荐:第8章5节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-运行测试脚本   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化 ...

  10. UserManager

    刚刚学习servlet,打算学做一个小项目把前边学到的知识做一个总结. 由于只是实现了一些简单的功能,所以美工就凑合着看吧(美工其实也不太会). 首先项目整体架构如图 项目准备工作: 要用到mysql ...