javax.swing.UIManager
    static UIManager.LookAndFeelInfo[] getInstalledLookAndFeels();
    获得一个用于描述已安装的观感实现的对象组
    static setLookAndFeel(String className)
    利用给定的观感,例如,javax.swing.plaf.metal.MetalLookAndFeel
java.swing.UIManager.LookAndFeelInfo
    String getName();
    返回观感的显示名称
    String getClassName();
    返回观感实现类的名称

适配器类

public interface WindowListener


      extends 
      EventListener

用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。
public interface WindowListener


      extends 
      EventListener

用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。

 void   windowActivated(WindowEvent e) 
          将 Window 设置为活动 Window 时调用。
 void   windowClosed(WindowEvent e) 
          因对窗口调用 dispose 而将其关闭时调用。
 void   windowClosing(WindowEvent e) 
          用户试图从窗口的系统菜单中关闭窗口时调用。
 void   windowDeactivated(WindowEvent e) 
          当 Window 不再是活动 Window 时调用。
 void   windowDeiconified(WindowEvent e) 
          窗口从最小化状态变为正常状态时调用。
 void   windowIconified(WindowEvent e) 
          窗口从正常状态变为最小化状态时调用。
 void   windowOpened(WindowEvent e) 
          窗口首次变为可见时调用。

当程序用户希望关闭一个窗口时,JFrame就是WindowEvent的事件源,如果希望捕获这个事件,就必须有一个合适的监听器对象,并将它添加到框架的窗口监听器列表中。

WindowListener listener=...;
frame.addWindowListener(listener);

窗口监听器必须是实现WindowListener接口的类的一个对象。在WindowListener接口中就包含7个方法。当发生窗口事件时,框架将调用这些方法相应7个不同的事件。从他们的名字就可以指导作用。唯一的例外是Windows下通常将iconified(图表化)称为minimized(最小化)。下面是完整的WindowListener接口:

public interface WindowListener
{
    void windowOpened(WindowEvent e)
    void windowClosing
    void windowClosed
    void windowIconified
    void windowDeiconified
    void windowActivated
    void Deactivated
}

为了能够查看窗口是否被最大化,需要安装WinddowStateListener并覆盖windowStateChanged方法。
在java中,实现一个接口的任何类都必须实现接口中的所有方法,但是如果只对其中的一个方法感兴趣,也需要定义其他的所有方法:

class terminator implements WindowListener
{
    public void windowClosing(WindowEvent e)
    {
        if( user agree)
        System.exit(0);
    }
    public void ...
    public void ...
    ...
    ...

}

书写6个没有实际作用的代码是乏味的,所以每一个含有多个方法的AWT监听器接口都有一个适配器(adapter)类。这个类实现了日接口中所有方法,但是每一个方法都没有做任何事情,这意味着适配器类自动满足了java实现相关监听器接口的技术需求。可以通过扩展适配器类来制定对某些事件的响应动作。而不必实现接口中的所有方法。
下面使用窗口适配器。

//首先定义一个WindowAdapter类的扩展类,其中包含继承的6个没有做任何事情的方法与一个覆盖的方法windowClosing:
class Terminator implements WindowAdapter
{
    public void windowClosing(WindowEvent e)
    {
        if(usr agree)
            System.exit(0);
    }
}
//现在,可以将一个Terminator对象注册为事件监听器。
WindowListener listener=new Terminator();
frame.addWindowListener(listener);

只要框架产生了窗口事件,就会通过调用7个方法中的一个将时间传递给Listener对象。其中6个方法没有做任何事情;windowClosing方法调用System .exit(0);终止程序的执行
如果再扩展适配器类是将方法名拼错了,编译器不会捕获到这个错误。例如,如果在WindowAdapter类中定义一个windowIsClosing方法,就会得到一个包含8个方法的类,并且windowClosing没有做任何事情,可以使用@Override来避免这种事情
改进:

WindowListener listener=new Terminator();
frame.addWindowListener(listener);
//改进
frame.addWindowListener(new Terminator());
//改进
frame.addWindowListener(new WindowAdapter()
{
    public void windowClosing(WindowEvent e)
    {
        if(user agree)
            System.exit(0);
    }
});
java.awt.WindowListener
    void windowOpened(WindowEvent e)
    窗口打开后调用这个方法
    void windowClosing(WindowEvent e)
java.awt.event.WindowStateListener
    void windowStateChanged(WindowEvent e)
    窗口最大化,图标化或者恢复为正常大小时调用这个方法
java.awt.event.WindowEvent
    int getNewState()
    int getOldState()
    返回窗口状态改变事件中窗口的新旧状态,返回的整形数值是下列数值之一
    Frame.NORMAL;
    Frame.ICONIFID;
    Frame.MAXIMIZED_HORIZl
    ...