理论教育 Java程序设计-窗口事件实现与监控-详解

Java程序设计-窗口事件实现与监控-详解

时间:2023-10-18 理论教育 版权反馈
【摘要】:Window类添加监听器通过void addWindowListener方法实现,为指定的窗口添加侦听器,从而实现为该窗口接收窗口事件。其中的参数WindowListener l作为窗口监听Window窗口事件监听器对象。当用户触发的这些事件发生时需要做出响应,则需要注册WindowEvent事件监听器。当窗口发生了打开、关闭、激活、图标化、取消图标化或关闭而改变了状态时,注册的WindowEvent侦听器回调MyWindowListener中的不同的方法。

Java程序设计-窗口事件实现与监控-详解

Window(窗口)类从Container类派生,Window 对象是一个顶层窗口。Window对应的事件叫作窗口事件(WindowEvent),任何窗口(Window)以及窗口的子类(如JFrame类)都可能触发窗口事件,窗口事件包括打开窗口、正在关闭窗口、激活窗口、变成非活动窗口、最小化窗口和还原窗口。

Window类添加监听器通过void addWindowListener(WindowListener l)方法实现,为指定的窗口添加侦听器,从而实现为该窗口接收窗口事件。其中的参数WindowListener l作为窗口监听Window窗口事件监听器对象。

监听Window窗口事件(WindowEvent)的监听器接收java.awt.event包下WindowListener接口的实现类对象,当通过打开、关闭、激活、图标化、取消图标化或关闭而改变了窗口状态时,将调用该侦听器对象中的相关方法。

WindowListener接口中定义的抽象方法:

void windowActivated(WindowEvent e) //激活窗口

void windowClosed(WindowEvent e) //关闭窗口

void windowClosing(WindowEvent e) //正在关闭窗口

void windowDeactivated(WindowEvent e) //变为非活动窗口

void windowDeiconified(WindowEvent e) //还原窗口

void windowIconified(WindowEvent e) // 最小化窗口

void windowOpened(WindowEvent e) //打开窗口(www.daowen.com)

通过查看API文档可知,JFrame类间接从Window类派生,创建一个JFrame对象,JFrame对象是一个框架,属于窗体(Window)体系中的一员,因此同样可以实现窗口的最大化、最小化、关闭、点击窗体等一系列的操作。当用户触发的这些事件发生时需要做出响应,则需要注册WindowEvent事件监听器。

JFrame对象是通过addWindowListener方法注册窗体事件监听器,该方法需要接受一个监听器(WindowListener)对象。查找API文档,发现WindowListener是一个接口,

窗口监听器(WindowListener)的实例对象,是需要实现WindowListener接口,并重写WindowListener接口中的抽象方法,然后创建该实现类对象,作为参数传递给addWindow Listener。

当单击窗口右上角的最小化按钮时,监视器调用windowIconified()方法后,还会调用windowDeactivated()方法,使窗口处于非活动窗口。当单击任务栏上图标化的窗口按钮后,监视器调用windowDeiconified()还原窗口后,还会调用windowActivated()方法使窗口处于激活状态。

当单击窗口上的关闭图标时,监视器首先调用windowClosing()方法,该方法的执行必须保证窗口调用dispose()方法,这样才能触发“窗口已关闭”事件,监视器才会调用windowClosed()方法,同时必须把窗口的setDefaultCloseOperation()方法的参数设置成JFrame.DO_NOTHING_ON_CLOSE。

【例8.8】当窗口发生了打开、关闭、激活、图标化、取消图标化或关闭而改变了状态时,注册的WindowEvent侦听器回调MyWindowListener中的不同的方法。

Example8_8.java

MyWindowListener.java

注:Window类或者Window类的任何子类都可能会触发WindowEvent。JFrame是Window的子类,同样可以触发WindowEvent。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈