JDialog与WindowListener - windowClosing未被触发

5

我有一个继承自JDialog的类,其中包含一个窗口监听器:

class MyClass extends JDialog {

     public MyClass() {
         setDefaultCloseOperation( JDialog.DO_NOTHING_ON_CLOSE );
         addWindowListener( new WindowAdapter() {

                @Override
                public void windowClosing(WindowEvent e) {
                    System.out.println("closing...");
                    //do something...
                }

            });
     }

}

当我点击X按钮时,没有任何反应。而且我也看不到“closing…”的打印信息。
我错过了什么?

1
代码看起来合理,请发布一个SSCCE来演示问题。 - camickr
1个回答

10

对我而言可行。此外,也可以参考这个相关的示例

import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDialog;

class MyClass extends JDialog {

    public MyClass() {
        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("closing...");
                //do something...
            }
        });
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                MyClass m = new MyClass();
                m.setVisible(true);
            }
        });
    }
}

4
谢谢提供例子。我发现我是在添加窗口监听器之前调用了 setVisible 方法... - user800014
1
看啊,sscce的力量!我相信我也做过类似的事情。 :-) - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接