对话框需要依赖于一个窗口,它会随着窗口的关闭而关闭,随着窗口的最小化而隐藏,随着窗口的还原而再次显示。 对话框容器分为模态对话框和非模态对话框两类。模态对话框是指用户需要等到对话框处理完毕后才能与其他窗口交互,而非模态对话框允许用户在使用对话框同时与其他窗口交互。JDialog是Swing组件中的对话框,它继承了AWT组件中的Dialog类,它的功能是从一个窗体中弹出另一个窗体。JDialog类常用的构造方法如表12.2所示。
构造方法 | 功能描述 |
---|---|
public JDialog(Frame frame) | 创建一个无标题的对话框 |
public JDialog(Frame frame,String title) | 创建一个有标题的对话框 |
public JDialog(Frame frame,boolean model) | 创建一个无标题且指定类型的对话框 |
表12.2中,列举了JDialog类常用的构造方法,接下来通过一个案例来演示如何使用JDialog对话框,如例12-2所示。
例12-2 Demo1202.java
1import javax.swing.*;
2import java.awt.*;
3import java.awt.event.ActionEvent;
4import java.awt.event.ActionListener;
5
6public class Demo1202 {
7 public static void main(String[] args) {
8 JFrame jFrame = new JFrame("JFrame容器窗口"); // 创建JFrame窗体
9 jFrame.setLayout(new FlowLayout()); // 设置布局
10 jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11 jFrame.setVisible(true);
12 JButton jButton1 = new JButton("调用JDialog模态对话框窗口");
13 jFrame.add(jButton1); // 添加按钮
14 JButton jButton2 = new JButton("调用JDialog非模态对话框窗口");
15 jFrame.add(jButton2);
16 jFrame.setSize(400, 247);
17
18 final JLabel jLabel = new JLabel();
19 final JDialog jDialog = new JDialog(jFrame, "JDialog窗口");
20 jDialog.setSize(200, 150);
21 jDialog.setLocation(50, 60);
22 jDialog.setLayout(new FlowLayout());
23
24 jButton1.addActionListener(new ActionListener() {
25 public void actionPerformed(ActionEvent e) {
26 jDialog.setModal(true); // 设置模态对话框模式
27 if (jDialog.getComponents().length == 1) {
28 jDialog.add(jLabel);
29 }
30 jLabel.setText("JDialog模态对话框窗口1");
31 jDialog.setVisible(true);
32 }
33 });
34 jButton2.addActionListener(new ActionListener() {
35 public void actionPerformed(ActionEvent e) {
36 jDialog.setModal(false); // 设置为非模态对话框模式
37 if (jDialog.getComponents().length == 1) {
38 jDialog.add(jLabel);
39 }
40 jLabel.setText("JDialog非模态对话框窗口2");
41 jDialog.setVisible(true);
42 }
43 });
44 }
}
程序的运行结果如图12.3、12.4所示。
例12-2运行之后,先创建了JFrame窗体,在窗体中添加两个按钮,用于弹出JDialog窗口,然后分别点击按钮,将对应窗口弹出,图12.3为模态对话框,此时不能操作JFrame容器窗体,要先将弹出的JDialog对话框关闭才可以操作。图12.4可以操作JFrame容器窗口进行窗口关闭,JDialog非模态对话框窗口也随之进行关闭。第37行代码为设置模态对话框模式,第47行代码为设置非模态对话框模式。