Dialog是窗口的意思,它是Window的子类。与frame相比,frame是我们大的窗口,而dialog便是那种弹出来和你说话的对话框。
Dialog类的默认布局是BorderLayout
Dialog的一种比较典型的构造器,构造方法like这样:
Dialog(Dialog owner, String title, boolean modal)
owner: 第一个是它的爸爸,对话框通常依赖于其他窗口,就是要有个爸爸。爸爸可以是Frame也可以是Dialog。 所以一个Frame的对话框的加入不用add,而是你在爸爸那栏填好就行。
title:顾名思义,就是对话框的名字。
modal:这个bool尔值是是否模式化,如果参数为true,即该对话框模式化,那么这个对话框弹出来后其他窗口都会被屏蔽掉,比如等等那个例子打开模式化对话框后你是无法点亮原Frame的。 而如果参数为flase,即该对话框非模式化,此时打开这个对话框后仍可以点亮或操作其他窗口。
例子代码:
import java.awt.*; import java.awt.event.*; public class TestDialog { public static void main(String[] args) { new TestFrame("测试").FrameLaunch(); } } class TestFrame extends Frame{ //大窗口 Dialog d1 = null; Dialog d2 = null; Button b1 = null; Button b2 = null; TestFrame(String s) { super(s); } public void FrameLaunch() { //对两个对话框的处理 d1 = new Dialog(this,"模式对话框",true); d2 = new Dialog(this,"非模式对话框",false); d1.addWindowListener(new WindowMonitor()); d2.addWindowListener(new WindowMonitor()); d1.setBounds(20, 30, 300, 400); d2.setBounds(20, 30, 300, 400); //对两个按钮的处理 b1 = new Button("打开模式对话框"); b2 = new Button("打开非模式对话框"); b1.addActionListener(new ButtonMonitor1()); b2.addActionListener(new ButtonMonitor2()); //对那个爸爸frame的处理 setLocation(500,500); add(b1); add(b2,BorderLayout.SOUTH); addWindowListener(new WindowMonitor()); pack();//大窗口包住两个按钮 setVisible(true); } class ButtonMonitor1 implements ActionListener { //内部类,控制第一个窗口的弹出 public void actionPerformed(ActionEvent e) { d1.setVisible(true); } } class ButtonMonitor2 implements ActionListener { public void actionPerformed(ActionEvent e) { //内部类,控制第二个窗口的弹出 d2.setVisible(true); } } class WindowMonitor extends WindowAdapter { //内部类,窗口监听器,用来关闭窗口 public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); if( !(e.getWindow() instanceof Dialog)) { System.exit(0); } } } }