......      
        exitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                exitListener();
            }
        }); 
        addWindowListener(new WindowAdapter() {
            public void WindowClosing(WindowEvent e) {
                exitListener();
            }
        });    private void exitListener() {
        if(ok != true) 
            dispose();
        else {
            int option = JOptionPane.showConfirmDialog(null, "FileChange, are you Save?",
               "save file?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null);
            switch(option) {
               case JOptionPane.YES_OPTION :
                   saveListener();
                   break;
               case JOptionPane.NO_OPTION :
                   dispose();
            }
        }
    }
.......
请问 为什么exitItem点击的时候 正常调用exitListener();
而点右上角那个X的时候 就不能正常调用exitListener(); 而是直接默认关闭当前窗口了
这是为什么呢  是我哪里写错了吗?

解决方案 »

  1.   


    public void WindowClosd(WindowEvent e) { 
                    exitListener(); 

      

  2.   

    WindowClosing
    第一个w给大写了, 哈哈, 复制了你的, 也写错了. windowClosing, windowClosed
    这两个方法如果一个不行, 两个都用上, 肯定可以, 具体哪个是真正调用的, 也记不清了.
      

  3.   

    分享 程序员之家(www.phome.asia)技术官方群,希望有志之士的加入哦~~嘿嘿!java群:       java新手群: 19976477
           java新手群2:61983722
           java新手群3:100937801
           java新手群4:100937543
    C/C++/VC++群:       C/C++/VC++编程:19109875
           C/C++/VC++群2:20869693
           C/C++/VC++群3:85308657
           C/C++/VC++群4:100937628 希望对大家学习有所帮助!共同提升,共同进步~~
      

  4.   

    int option = JOptionPane.showConfirmDialog(null, "FileChange, are you Save?", ...)这里的 第一参数 换成 这个 window 对象试一试。
      

  5.   

    1. 多看JDK帮助文档里的函数名字.
    2. 使用JDK的annotation特性.
    例如你要重写(Override)父类的一个函数, 像刚才这个windowClosing, 可以像下面这样:@Override
    public void WindowClosd(WindowEvent e) { 
                    exitListener(); 

    在函数名前面加上一个@Override, 表示你要重写父类的一个方法, 如果你的这个方法名在父类中找不到, 编译的时候就会报错.
    上面的就会报错, 因为把w大写了, 而函数WindowClosing在父类中是没有的.