窗口Dialog

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

}
原文地址:https://www.cnblogs.com/wangshen31/p/6946969.html