常用窗体
JFrame窗体
开发 Swing 程序的流程可以被简单地概括为首先通过继承 javax.swing.JFrame 类创建一个窗体,然后向这个窗体中添加组件,最后为添加的组件设置监听事件。下面将详细讲解 JFrame 窗体的使用方法。
JFrame 类的常用构造方法包括以下两种形式。
-
public JFrame():创建一个初始不可见、没有标题的窗体。
-
public JFrame(String title):创建一个不可见、具有标题的窗体。
例如,创建一个不可见、具有标题的窗体,关键代码如下:
JFrame jf = new JFrame("登录系统");
Container container = jf.getContentPane();
在创建窗体后,先调用 getContentPane() 方法将窗体转换为容器,再调用 add() 方法或者 remove() 方法向容器中添加组件或者删除容器中的组件。向容器中添加按钮,关键代码如下:
JButton okBtn = new JButton("确定");
container.add(okBtn);
删除容器中的按钮,关键代码如下:
container.remove(okBtn);
创建窗体后,要对窗体进行设置,如设置窗体的位置、大小、是否可见等。JFrame 类提供的相应方法可实现上述设置操作,具体如下。
-
setBounds(int x, int y, int width, int leight):设置窗体左上角在屏幕中的坐标为(x, y),窗体的宽度为 width,窗体的高度为 height。
-
setLocation(int x, int y):设置窗体左上角在屏幕中的坐标为(x, y)。
-
setSize(int width, int height):设置窗体的宽度为 width,高度为 height。
-
setVisibale(boolean b):设置窗体是否可见。b 为 true 时,表示可见;b 为 false 时,表示不可见。
-
setDefaultCloseOperation(int operation):设置窗体的关闭方式,默认值为 DISPOSE_ON_CLOSE。Java 语言提供了多种窗体的关闭方式,常用的有4种,如表18.2所示。

【例18.1】第一个窗体程序(实例位置:资源包\TM\sl\18\1)
创建 JFreamTest 类,在 JFreamTest 类中创建一个内容为 “这是一个 JFrame 窗体” 的标签后,把这个标签添加到窗体中。
import java.awt.*; //导入AWT包
import javax.swing.*; //导入Swing包
public class JFreamDemo {
public static void main(String args[]) { // 主方法
JFrame jf = new JFrame();// 创建窗体对象
jf.setTitle("创建一个JFrame窗体");// 设置窗体标题
Container container = jf.getContentPane(); // 获取主容器
JLabel jl = new JLabel("这是一个JFrame窗体");// 一个文本标签
jl.setHorizontalAlignment(SwingConstants.CENTER); // 使标签上的文字居中
container.add(jl); // 将标签添加到主容器中
jf.setSize(300, 150); // 设置窗体宽高
jf.setLocation(320, 240);// 设置窗体在屏幕中出现的位置
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 关闭窗体则停止程序
jf.setVisible(true); // 让窗体展示出来
}
}
运行结果如图18.2所示。

JDialog对话框
JDialog 对话框继承了 java.awt.Dialog 类,其功能是从一个窗体中弹出另一个窗体,如使用 IE 浏览器时弹出的确定对话框。JDialog 对话框与 JFrame 窗体类似,被使用时也需要先调用 getContentPane() 方法把 JDialog 对话框转换为容器,再对 JDialog 对话框进行设置。JDialog 类常用的构造方法如下。
-
public JDialog():创建一个没有标题和父窗体的对话框。
-
public JDialog(Frame f):创建一个没有标题,但指定父窗体的对话框。
-
public JDialog(Frame f, boolean model):创建一个没有标题,但指定父窗体和模式的对话框。如果 model 为 true,那么弹出对话框后,用户无法操作父窗体。
-
public JDialog(Frame f, String title):创建一个指定标题和父窗体的对话框。
-
public JDialog(Frame f, String title, boolean model):创建一个指定标题、父窗体和模式的对话框。
【例18.2】在窗体中弹出对话框(实例位置:资源包\TM\sl\18\2)
创建 MyJDialog 类,使之继承 JDialog 窗体,在父窗体中添加按钮,当用户单击按钮时,弹出对话框。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyJDialog extends JDialog { // 自定义对话框类,继承JDialog
public MyJDialog(MyFrame frame) {
// 调用父类构造方法,第一个参数是父窗体,第二个参数是窗体标题,第三个参数表示阻塞父窗体
super(frame, "第一个JDialog窗体", true);
Container container = getContentPane(); // 获取主容器
container.add(new JLabel("这是一个对话框")); // 在容器中添加标签
setBounds(120, 120, 100, 100); // 设置对话框窗体在桌面显示的坐标和大小
}
}
public class MyFrame extends JFrame { // 自定义窗体类,继承JFrame
public MyFrame() {// 窗体的构造方法
Container container = getContentPane(); // 获得窗体主容器
container.setLayout(null); // 容器使用绝对布局
JButton bl = new JButton("弹出对话框"); // 创建一个按钮
bl.setBounds(10, 10, 100, 21); // 定义按钮在容器中的坐标和大小
bl.addActionListener(new ActionListener() { // 为按钮添加点击事件
public void actionPerformed(ActionEvent e) {// 点击事件触发的方法
MyJDialog dialog = new MyJDialog(MyFrame.this); // 创建MyJDialo对话框
dialog.setVisible(true); // 使对话框可见
}
});
container.add(bl); // 将按钮添加到容器中
setSize(200, 200); // 窗体的宽高
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 关闭窗体则停止程序
setVisible(true); // 使窗体可见
}
public static void main(String args[]) {
new MyFrame();
}
}
运行结果如图18.3所示。

JOptionPane小型对话框
Java API 中的 javax.swing.JOptionPane 类是一个非常简便的小型对话框类,该类用于创建对话框的方法都是静态方法,无须创建对象即可弹出。在日常开发中经常使用该类弹出提示、确认用户需求、调试程序等。JOptionPane 提供了 4 种创建对话框的方法,如表18.3所示。

下面分别介绍这 4 种对话框的外观样式和使用方法。
自定义对话框
首先介绍一个自定义的对话框,这个对话框可以说是一块白板,开发者可以自行定义对话框中显示的元素。创建自定义对话框的方法如下:
public static int showOptionDialog(Component parentComponent,
Object message,
String title,
int optionType,
int messageType,
Icon icon,
Object[] options,
Object initialValue)
参数说明如下。
-
parentComponent:指明对话框在哪个窗体上显示,如果传入具体的窗体对象,对话框会在该窗体居中位置显示,如果传入null,则在屏幕中间弹出对话框。
-
message:提示的信息。
-
title:对话框的标题。
-
optionType:指定可用于对话框的选项的整数,即 DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION 或 OK_CANCEL_OPTION。
-
messageType:指定消息种类的整数,主要用于确定来自可插入外观的图标,即 ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE 或 PLAIN_MESSAGE。
-
icon:在对话框中显示的图标。options:指示用户可能选择的对象组成的数组。如果对象是组件,则可以正确呈现,非 String 对象使用其 toString 方法呈现;如果此参数为 null,则由外观确定选项。
-
initialValue:表示对话框的默认选择的对象,只有在使用 options 时才有意义,可以为 null。
【例18.3】弹出会话框,问用户准备好了吗(实例位置:资源包\TM\sl\18\3)
在自定义对话框中显示 “你做好准备了吗?”,并添加两个 JButton 按钮,分别为 “是的” 和 “再想想”。
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;
public class Demo {
public static void main(String[] args) {
Object o[] = {new JButton("是的"), new JButton("再想想")}; // 按钮对象的Object数组
Icon icon = new ImageIcon("src/注意.png"); // 获取图标对象
JOptionPane.showOptionDialog(null, "你做好准备了吗?", "注意了!",
JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, icon, o, null);
}
}
运行效果如图18.4所示。

确认框
确认框已经封装好了一套外观样式,弹出后要求用户做选择操作,用户选择具体选项后,确认框可以返回用户的选择结果,结果以 int 方式返回。创建确认对话框的方法有以下几种重载形式:
-
调出带有选项 Yes、No 和 Cancel 的对话框,标题为 Select an Option。
static int showConfirmDialog(Component parentComponent, Object message);
-
调出一个由 optionType 参数确定其中选项数的对话框。
static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType)
-
调用一个由 optionType 参数确定其中选项数的对话框,messageType 参数确定要显示的图标。
static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType, int messageType)
-
调出一个带有指定图标的对话框,其中的选项数由 optionType 参数确定。
static int showConfirmDialog(Component parentComponent,
Object message,
String title,
int optionType,
int messageType,
Icon icon)
【例18.4】弹出确认框,询问用户是否离开(实例位置:资源包\TM\sl\18\4)
弹出一个确认框,询问用户是否离开,提供“是”、“否”、“取消” 3 个按钮。
import javax.swing.JOptionPane;
public class Demo {
public static void main(String[] args) {
int answer = JOptionPane.showConfirmDialog(null,
"确定离开吗?",
"标题",
JOptionPane.YES_NO_OPTION);
}
}
此确认框的弹出效果如图18.5所示。如果用户单击 “是” 按钮,那么变量 answer 获得的值为 0;如果用户单击 “否” 按钮,那么变量 answer 获得的值为 1;如果用户单击 “取消” 按钮,那么变量 answer 获得的值为 2。
如果只想弹出 “是” 和 “否” 两个按钮,可以使用 JOptionPane.YES_NO_OPTION 类型,该类型对话框效果如图18.6所示。


输入框
输入框已经封装好了一套外观样式,弹出后要求用户在文本框中输入文本,用户完成输入操作后,输入框可以返回用户输入的结果。创建输入框的方法有以下几种重载形式:
-
显示请求用户输入内容的问题消息对话框,它把 parentComponent 作为其父级。
static String showInputDialog(Component parentComponent, Object message)
-
显示请求用户输入内容的问题消息对话框,它把 parentComponent 作为其父级。
static String showInputDialog(Component parentComponent, Object message, Object initialSelectionValue)
-
显示请求用户输入内容的对话框,它把 parentComponent 作为其父级,该对话框的标题为 title,消息类型为 messageType。
static String showInputDialog(Component parentComponent, Object message, String title, int messageType)
-
提示用户在可以指定初始选择、可能选择及其他所有选项的模块化的对话框中输入内容。
static Object showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue)
-
显示请求用户输入的问题消息对话框。
static String showInputDialog(Object message)
-
显示请求用户输入的问题消息对话框,它带有已初始化为 initialSelectionValue 的输入值。
static String showInputDialog(Object message, Object initialSelectionValue)
【例18.5】弹出会话框,让用户输入自己的姓名(实例位置:资源包\TM\sl\18\5)
弹出一个输入框,让用户输入自己的姓名。
import javax.swing.JOptionPane;
public class Demo {
public static void main(String[] args) {
String name = JOptionPane.showInputDialog(null, "请输入您的姓名");
}
}
此输入框弹出效果如图18.7所示,用户输入姓名后,单击 “确定” 按钮,变量 name 获得的值就是输入框中的文本值。如果用户单击 “取消” 按钮,那么变量 name 获得的值为 null。

通知框
通知框是最简单的一个对话框,仅弹出提示,不会返回任何值。创建通知框方法有以下几种重载形式:
-
调出标题为 Message 的信息消息对话框。
static void showMessageDialog(Component parentComponent, Object message)
-
调出对话框,它显示使用由 messageType 参数确定的默认图标的 message。
static void showMessageDialog(Component parentComponent, Object message, String title, int messageType)
-
调出一个显示信息的对话框,为其指定了所有参数。
static void showMessageDialog(Component parentComponent, Object message, String title, int messageType, Icon icon)
【例18.6】弹出警告对话框(实例位置:资源包\TM\sl\18\6)
弹出一个警告提示,告知用户已与服务器断开连接。
import javax.swing.JOptionPane;
public class Demo {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,
"您与服务器断开了连接",
"发生错误",
JOptionPane.ERROR_MESSAGE);
}
}

编程训练(答案位置:资源包\TM\sl\18\编程训练)
【训练1】创建指定大小的窗体 在桌面(300,100)坐标位置处创建一个宽320、高240的窗体。
【训练2】创建动态大小的窗体 创建动态大小的窗体,并根据桌面大小调整窗体大小。