当前位置: 代码迷 >> J2SE >> windowListener是否放在setVisible之前才有效?解决方法
  详细解决方案

windowListener是否放在setVisible之前才有效?解决方法

热度:109   发布时间:2016-04-24 01:05:43.0
windowListener是否放在setVisible之前才有效?
下面是我程序的构造方法:创建一个继承于JDialog的类,添加窗口监听器,将这个Dialog设置为可见。
这是正常执行的
Java code
public LoginDialog(JDBC jdbc, JFrame frame) {        super(frame, true);        this.jdbc = jdbc;        this.setLayout(null);        initComponent();        this.setSize(300, 250);        this.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                  System.exit(0);              }          });        this.setVisible(true);    }


可是之前我的代码是:
Java code
public LoginDialog(JDBC jdbc, JFrame frame) {        super(frame, true);        this.jdbc = jdbc;        this.setLayout(null);        initComponent();        this.setSize(300, 250);                this.setVisible(true);                this.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                  System.exit(0);              }          });    }


这样的代码,根本没有,就好像没有添加窗口监听器一样,为什么一定要写在setVisible那个方法之前,才有效呢?

------解决方案--------------------
模态窗口和非模态的区别吧。楼主可以找相关资料
Java code
import java.awt.Dialog;import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class LoginDialog extends Dialog {    public LoginDialog(Frame frame) {        super(frame, false);//true,false 切换        try {            this.setLayout(null);            this.setSize(300, 250);            this.addWindowListener(new WindowAdapter(){                public void windowClosing(WindowEvent e){                                        System.exit(0);                }            });            this.setVisible(true);        }finally {            System.out.println("veryGood");//本来想模拟关掉模态窗口,打印,结果,还没想到好点的办法打印。        }    }    public static void main(String[] args) throws Exception {        new LoginDialog(new Frame());    }}
  相关解决方案