好像Frame如果不重写windowClosing会导致窗口无法关闭
那么为什么JFrame没有重写windowClosing依旧可以关闭窗口参考代码import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class JFrameDemo { public JFrameDemo() {
JFrame f = new JFrame();
Container contentPane = f.getContentPane();
contentPane.setLayout(new GridLayout(1, 2));
JButton b1 = new JButton("打开JFrame窗口");
JButton b2 = new JButton("打开Frame窗口");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFrame f1 = new JFrame();
f1.setSize(new Dimension(400, 300));
f1.setVisible(true);
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Frame f2 = new Frame();
f2.setSize(new Dimension(400, 300));
f2.setVisible(true);
}
});
contentPane.add(b1);
contentPane.add(b2);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public static void main(String[] args) {
new JFrameDemo();
}
}

解决方案 »

  1.   

          f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    你不是在这里加了处理吗?
      

  2.   

    还可以这样
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      

  3.   


    这个是f的,不是f1的b1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JFrame f1 = new JFrame();
                    f1.setSize(new Dimension(400, 300));
                    f1.setVisible(true);
                }
            });
      

  4.   

    f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    内部类,有监听
      

  5.   


    原来JFrame有这个方法啊,它的初值是什么??
      

  6.   

    既然大家都认为是监听的问题,那请解释一下下面的代码,JFrame依旧可以关闭,Frame无法关闭
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class FrameDemo { public FrameDemo() {
    Frame f = new Frame();
    f.setLayout(new GridLayout(1, 2));
    Button b1 = new Button("打开JFrame窗口");
    Button b2 = new Button("打开Frame窗口");
    b1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    JFrame f1 = new JFrame();
    f1.setSize(new Dimension(400, 300));
    f1.setVisible(true);
    }
    });
    b2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    Frame f2 = new Frame();
    f2.setSize(new Dimension(400, 300));
    f2.setVisible(true);
    }
    });
    f.add(b1);
    f.add(b2);
    f.pack();
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    } public static void main(String[] args) {
    new FrameDemo();
    }
    }
    这回总公平了吧!
      

  7.   

    初始值是HIDE_ON_CLOSE另外,你实际上发现了JFrame和Frame的一个不同,就是在关闭这个话题上。
    JFrame确实可以自己关闭而不需要加windowListener,这是特地设计成这样的。
    如果不希望JFrame关闭自己,要setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE),这样JFrame才会和Frame一样表现。
      

  8.   

    因为这是两个不同的类。两个不同的类,即使有继承关系,还有可能实现完全不同的功能啊,这个很正常。千万不要以为 AWT 里的 xx 类 和 Jxx 类是相同的。 否则他们(Jxx的作者们)可是白辛苦了