package org.eclipsebook.ch06;import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JFrame;
import javax.swing.JPanel;public class Ch06_03 extends JFrame {
    Panel p;
    public Ch06_03(){
     super("Swing application");
    
     Container contentPane = getContentPane();
     p = new Panel();
     contentPane.add(p);
    }
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
        final JFrame f = new Ch06_03();
        
        f.setBounds(100, 100, 300, 300);
        f.setVisible(true);
        f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        f.addWindowListener(new WindowAdapter(){
         public void windowClosing(WindowEvent e){
         System.exit(0);
         }
        });//上面的这种方式怎么还要来个WindowListener呢???
          //与这个JFrame.EXIT_ON_CLOSE有什么不同么/这个没有加监听器的,
        //(我试了试把那个监听器注释掉后,仍可用,就是按下关闭后反应慢些)以前没认真想过的。
}}
class Panel extends JPanel{
Panel(){
setBackground(Color.white);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawString("Hello from Eclipse", 60, 100);
}
}

解决方案 »

  1.   

    去查一下java API吧!!
    f.addWindowListener(new WindowAdapter(){
             public void windowClosing(WindowEvent e){
             System.exit(0);
             }
            });
    这个WindowAdapter中实现了windowClosing方法,也就是说在这个窗口将被关闭时,执行System.exit(0);
    结束整个应用程序!
      

  2.   

    JFrame.EXIT_ON_CLOSE的作用是当按下“X”时,是整个窗口关闭,这是JFrame的可选的默认行为,
    但加了adapter之后,作用就是在closing事件的时候就退出,并不是在closed事件才退出
    所以时间延长了是很正常的行为
      

  3.   

    还是不大清楚……
      那么Closing与Closed有什么不同呢????
      

  4.   

    以前做项目时遇到过,
    区别在于:
     1: 设置JFrame .setDefaultCloseOperation(...);  
    如果项目中同时打开几个JFrame   关闭任何一个所有的JFrame将全部关闭,
     2: f.addWindowListener(new   WindowAdapter(){ ...});  
     只关闭当前的窗体。