JDialog

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);
	}
}

总结

  • 模态对话框:必须关闭当前对话窗口才能处理其它对话窗口
  • 非模态对话框:不限制处理窗口的先后顺序
上一篇:swing.2窗体控件


下一篇:GUI编程:swing之JDialog(弹窗)