- package com.zhao.myDlg;
- import java.awt.*;
- import java.awt.event.*;
- public class Myframe {
- public static void main(String argv[]) {
- final Frame f1 = new Frame();
- Button b1 = new Button("click");
- f1.add(b1);
- f1.setSize(400, 400);
- f1.setVisible(true);
- f1.pack();
- b1.addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- final Dialog d = new Dialog(f1, "dialog", true);
- //final Dialog d = new Dialog(f1, "dialog", flase);
- d.setSize(800, 600);
- //d.setVisible(true);
- d.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent evt) {
- d.setVisible(false);
- }
- });
- d.setVisible(true);
- }
- });
- f1.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent evt) {
- System.exit(0);
- }
- });
- }
- }
比较模式对话框与非模式对话框
模态的就是始终最前,阻塞别的线程直至对话框线程结束
你可以在构造的时候用:JDialog(Dialog owner, String title, boolean modal)
如果你是extends JDialog ;有了自己的构造函数;
可以在自己的构造函数调用父类即是JDialog的构造函数来实现,定义模式非模式;
调用方法 super(adminUI, "添加职员帐户", true);
也可以构造完之后调用public void setModal(boolean b)
1.非模式对话框(false) + d.setVisible(true);在d.addWindowListener前
这样click后弹出的非模式对话框可以关闭
2.模式对话框(true) + d.setVisible(true);在d.addWindowListener前
这样click后弹出的非模式对话框不可以关闭
3.模式对话框(true) + d.setVisible(true);在d.addWindowListener后
这样click后弹出的非模式对话框可以关闭
总结:
System.exit(0); 退出程序
d.setVisible(false); 隐藏不可见
对于模式对话框,setVisible或者show以后,是被blocked掉的,
也就是这之后的addWindowListener根本不会执行,知道对话框被关闭。
而addWindowListener不被执行的话,对话框是不会被关闭的。
所以你的程序就永远关不了。
把 addWindowListener放在setVisible之前就行了。