/*
时间:2015年3月22日15:56:45
目的:测试窗口事件
提示:细细体味窗口事件和鼠标事件的处理的对比。两者差别不大。理解适配的使用。内部类的使用。
//这是格式,
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("窗口正在关闭");
System.exit(0);
}
});
class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.out.println("窗口正在关闭");
System.exit(0);
}
}
内部类和内部实现类的区别,其实重要是其中的方法。按照我的理解,因为如果按照内部实现类的方法,我们需要传进addWindowListener一个实现了WindowListener接口的类的实例对象,因此需要new关键字,类名并不是要紧的,因为在这一刻,我们所需要的仅仅只是通过类名创建一个对象。因此此刻类名是可有可无的。因此我们把 class MyWindowListener 删去。当然extends也不需要存在了。但是我们仍然需要WindowAdapter,这是因为我们需要知道我们所继承的父类或者所实现的接口,这个是无法缺失的。创建对象需要(),因为可能需要传入参数,然后需要的就只是类体了。因此从这个方面看,内部类的那个格式是合理的,当然这也只是我个人的观点。
Window对象是一个没有边界和菜单栏的顶层窗口,窗口的默认布局是BorderLayout。
构造窗口时,他必须拥有窗体,对话框或其他作为其所有者定义的窗口。
顶层窗口(包括Window, Frame, Dialog)的位置和大小受桌面窗口管理系统的限制。
将尽所有努力响应这样的请求。但是,在某些情况下,
窗口管理系统可以忽略这样的请求,或修改请求的几何结构,
以放置和调整 Window 的大小,使之更好地与桌面设置匹配。
应用程序可以随意设置不可见的Window的大小和位置,但是当WIndow可见时,窗口管理系统可以随后更改它的位置
和大小。
窗口能够生成一下WindwosEvents:WindowOpened, WindowClosed, indowGainedFocus, IndowLostFocus
构造方法:
Window(Frame owner)
构造一个新的、最初不可见的窗口,使用制定的Frame作为其所有者。
Window(Window owner)
构造一个新的、最初不可见的窗口,使用指定Window作为其所有者。
Window(Window owner, GraphicsConfiguration gc)
构造一个新的,最初不可见的窗口,使用指定的所有者Window和屏幕设备的GraphicsConfiguration
WindowListener接口
用于接收窗口事件的侦听器接口。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法)
要么扩展抽象类WindowAdapter(仅重写所需要的方法)然后使用窗口的addWindowListener方法
方法将从该类所创建的侦听器对象向该Window注册。当通过打开、关闭、激活、图标化或取消图标化而改变了
窗口状态时,将调用该侦听器对象的相关方法,并将WindowEvent传递给该方法。
该接口所含有的方法是:
public void windowOpened(WindowEvent e);
窗口首次变为可见时调用
public void windowCLosing(WindowEvent e);
用户试图从窗口的系统菜单中关闭窗口时调用。
public void windowClosed(WindowEvent e);
因对窗口调用dispose而将其关闭时调用。
windowIconified
public void windowIconified(WindowEvent e)
窗口从正常状态变为最小化状态时调用。对于很多平台而言,已经将最小化的窗口将显示为窗口iconImage属性中制定的图标
public void windowDeiconified(WindowEvent e)
窗口从最小化状态变为正常状态时调用。
public void windowActivated(WindowEvent e)
将Window设置为活动Window时调用。只有框架或对话框可以成为活动Window。
本机的窗口系统可能使用特殊装饰表示活动Window或其子窗口,如高亮显示标题栏。
活动Window要么是聚焦Window要么是作为聚焦Window所有者的第一个Frame或Dialog
public void windowDeactivated(WindowEvent e);
当Window不再是活动Window时调用。
WindowStateListener
用于接收窗口状态事件的侦听器接口。
旨在处理床阔状态事件的类要么实现此接口(及其包含的所有方法)要么扩展抽象WindowAdapter
类(仅仅重写所需的方法)
然后使用Window的addWindowStateListener方法将从该类所创建的侦听器对象向该Window注册。
当通过图标化,最大化等改变窗口状态时,就调用侦听器对象中的windowStateChanged方法,
并将WindowEvent传递给该方法。
所含方法:
public void windowStateChanged(WindowEvent e);
窗口状态改变时调用。
WindowAdapter类
声明如下;
public abstract class WindowAdapter extends Object
implements WindowListener, WindowStateListener, WindowFocusListener;
接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。
扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法。
(如果要实现 WindowListener 接口,则必须定义该接口内的所有方法
。此抽象类将所有方法都定义为 null,所以只需针对关心的事件定义方法。)
使用扩展的类可以创建侦听器对象,然后使用窗口的 addWindowListener 方法向该窗口注册侦听器。
当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,
并将 WindowEvent 传递给该方法。
*/
import java.awt.*;
import java.awt.event.*;
public class TestWindowClose {
public static void main(String[] args) {
new MyFrame("TestWindowClose");
}
}
class MyFrame extends Frame {
public MyFrame(String title) {
super(title);
setLayout(null);
setBounds(200, 200, 300, 300);
setBackground(new Color(204, 35, 205));
//addWindowListener(new MyWindowListener());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("窗口正在关闭");
System.exit(0);
}
});
setResizable(false);
setVisible(true);
}
}
/*
class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.out.println("窗口正在关闭");
System.exit(0);
}
}
*/