JDialog
JDialog是Swing的一个*容器,通常表示对话框
JDialog对话框有两种:模态对话框和非模态对话框
- 模态对话框:当前对话窗口必须处理完成才能与其它对话窗口交互
- 非模态对话框:当前对话窗口不用处理完成可以与其它对话窗口交互
常用构造方法
方法声明 | 功能描述 |
---|---|
JDialog(Frame owner) | 创建一个无模式对话框,其中指定的是 Frame作为其所有者,并且是一个空的标题。 |
JDialog(Frame owner, boolean modal) | 创建一个具有空标题和指定模态的对话框,并以 Frame作为其所有者。 |
JDialog(Frame owner, String title) | 使用指定的标题和指定的所有者框架创建无模式对话框。 |
JDialog是小窗体,JFrame是大窗体。要想使用小窗体,必须先创建大窗体。也就是说要用JDialog小窗体必须先创建JFrame大窗体
1.创建JFrame窗体对象
import javax.swing.JFrame;
public class Demo2_JDiaog {
public static void main(String[] args) {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
-
改进
提取方法
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
createAndShowGUI();
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
使用工具类
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
简化
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
2.创建一个JDialog对话框
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
// 2.创建一个JDialog对话框
// JDialog(Frame owner, String title)
JDialog dialog = new JDialog(jf,"abc");
}
}
运行一下,是不是发现没有效果呢?有了创建JFrame的前车之鉴,JDialog是不是也可以向JFrame一样创建对象呢?
我们来试一试
让JDialog显示
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
// 2.创建一个JDialog对话框
// JDialog(Frame owner, String title)
JDialog dialog = new JDialog(jf,"abc");
dialog.setVisible(true);
}
}
设置JDialog大小
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
// 2.创建一个JDialog对话框
// JDialog(Frame owner, String title)
JDialog dialog = new JDialog(jf,"abc");
dialog.setSize(100, 200);
dialog.setVisible(true);
}
}
运行代码我们发现鼠标可以略过JDialog点击JFrame说明JDialog默认是非模态对话框
怎么才能把JDialog变成模态对话框呢?答案是——设置
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
// 2.创建一个JDialog对话框
// JDialog(Frame owner, String title)
// 构造方法中传入true,那么就是设置模式为模态对话框
JDialog dialog = new JDialog(jf, "abc", true);
dialog.setSize(100, 200);
dialog.setVisible(true);
}
}
完整版
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo2_JDiaog {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGUI());
}
private static void createAndShowGUI() {
// 1.创建JFrame窗体对象
JFrame jf = new JFrame("演示JDialog");
jf.setSize(300, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
// 2.创建一个JDialog对话框
// JDialog(Frame owner, String title)
// 构造方法中传入true,那么就是设置模式为模态对话框
JDialog dialog = new JDialog(jf, "abc", true);
//HIDE_ON_CLOSE为默认值
dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
dialog.setSize(100, 200);
dialog.setVisible(true);
}
}
总结
- 模态对话框:必须关闭当前对话窗口才能处理其它对话窗口
- 非模态对话框:不限制处理窗口的先后顺序