Java WindowAdapter适配器类

JAVA中实现窗口事件监听的两种方案 <br /><br /> <br />1.       AWT委托事件模型的基本概念及实现事件监听的流程<br />事件:是指一个状态的改变或者活动的发生。例如,单击窗口关闭按钮,将改变该窗口的状态,产生窗口关闭事件;单击一个按钮,将产生单击事件等。<br />事件类:不同的事件需要封装成不同的事件类。JAVA在java.awt.event包中定义了许多事件类,如窗口事件类(WindowEvent)和单击事件类(AcitionEvent)等,javax.Swing.event包中也有很多事件类。<br / 阅读详情

  并不是所有的事件处理都像按钮点击那样简单。在正规的程序中,往往希望用户在确认没有丢失所做工作之后再关闭程序。当用户关闭框架时,可能希望弹出一个对话框来警告用户没有保存的工作有可能会丢失,只有在用户确认之后才退出程序。

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

  窗口监听器必须是实现WindowListener接口的类的一个对象。在WindowListener接口中包含7个方法。当发生窗口事件时,框架将调用这些方法响应7个不同的事件。从它们的名字就可以得知其作用,唯一的例外是在Windows下,通常将iconified称为minimized。

public interface WindowListener extends EventListener {
    /**
     * Invoked the first time a window is made visible.
     */
    public void windowOpened(WindowEvent e);

    /**
     * Invoked when the user attempts to close the window
     * from the window's system menu.
     */
    public void windowClosing(WindowEvent e);

    /**
     * Invoked when a window has been closed as the result
     * of calling dispose on the window.
     */
    public void windowClosed(WindowEvent e);

    /**
     * Invoked when a window is changed from a normal to a
     * minimized state. For many platforms, a minimized window 
     * is displayed as the icon specified in the window's 
     * iconImage property.
     * @see java.awt.Frame#setIconImage
     */
    public void windowIconified(WindowEvent e);

    /**
     * Invoked when a window is changed from a minimized
     * to a normal state.
     */
    public void windowDeiconified(WindowEvent e);

    /**
     * Invoked when the Window is set to be the active Window. Only a Frame or
     * a Dialog can be the active Window. The native windowing system may
     * denote the active Window or its children with special decorations, such
     * as a highlighted title bar. The active Window is always either the
     * focused Window, or the first Frame or Dialog that is an owner of the
     * focused Window.
     */
    public void windowActivated(WindowEvent e);

    /**
     * Invoked when a Window is no longer the active Window. Only a Frame or a
     * Dialog can be the active Window. The native windowing system may denote
     * the active Window or its children with special decorations, such as a
     * highlighted title bar. The active Window is always either the focused
     * Window, or the first Frame or Dialog that is an owner of the focused
     * Window.
     */
    public void windowDeactivated(WindowEvent e);
}
  在Java中,实现一个接口的任何类都必须实现其中的所有方法;在这里,意味着需要实现7个方法。然而这里如果我们只对名为windowClosing的方法感兴趣。

  当然,可以这样定义实现这个接口的类:在windowClosing方法中增加一个对System.out.println("TerminatorListener--windowClosing");的调用,其它6个方法不做任何事情:

 

class TerminatorListener implements WindowListener {

    public void windowClosing(WindowEvent e) {
        System.out.println("TerminatorListener--windowClosing");
    }

    @Override
    public void windowOpened(WindowEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowClosed(WindowEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowIconified(WindowEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowActivated(WindowEvent e) {
        //  throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        //  throw new UnsupportedOperationException("Not supported yet.");
    }
}
  书写6个没有任何操作的方法代码显然是一种乏味的工作。鉴于简化的目的,每个含有多个方法的AWT监听器接口都配有一个适配器(adapter)类,这个类实现了接口中的所有方法,但每个方法没有做任何事情。这意味着适配器类自动地满足了Java实现相关监听器接口的技术需求。可以通过扩展适配器类来指定对某些事件的响应动作,而不必实现接口中的每个方法(ActionListener这样的接口只有一个方法,因此没必要提供适配器类)。

  下面使用窗口适配器。首先定义一个WindowAdapter类的扩展类,其中包含继承的6个没有做任何事情的方法和一个覆盖的方法windowClosing:

class TerminatorAdapter extends WindowAdapter {

    public void windowClosing(WindowEvent e) {
        System.out.println("TerminatorAdapter---windowClosing");
    }
}

  现在,可以将一个Terminator对象注册为事件监听器:

WindowListener listenerAdapter = new TerminatorAdapter();
adapterFrame.addWindowListener(listenerAdapter);
  只要框架产生了窗口事件,就会通过调用7个方法之中的一个方法将事件传递给listener对象,其中6个方法没有做过任何事情;windowClosing方法调用System.exit(0)终止应用程序的执行。

  警告:如果在扩展适配器类时将方法名拼写错了,编译器不会捕获到这个错误。例如,如果在WindowAdapter类中定义一个windowIsClosing方法,就会得到一个包含8个方法的类,并且windowClosing方法没有做任何事情。

  创建一个扩展于WindowAdapter的监听器类是一个很好的改进,但是还可以继续改进。事实上,没有必要为listener对象命名。只需写成:

adapterFrame.addWindowListener(new WindowAdapter());
  不要就此止步!我们可以将监听器类定义为框架的匿名内部类。

adapterFrame.addWindowListener(new WindowAdapter() {

     public void windowClosing(WindowEvent e) {
         System.out.println("Terminator--windowClosing");
     }
});
  这段代码具有下列作用:

  定义了一个扩展于WindowAdapter类的无名类。

  将windowClosing方法添加到匿名类中。

  从WindowAdapter继承6个没有做任何事情的方法。

  创建这个类的一个对象,这个对象没有名字。

  将这个对象传递给addWindowListener方法。

完整示例代码如下:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;

public class ListenerTest {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                AdapterFrame adapterFrame = new AdapterFrame();
                WindowListener listenerListener = new TerminatorListener();
                adapterFrame.addWindowListener(listenerListener);
                
                WindowListener listenerAdapter = new TerminatorAdapter();
                 adapterFrame.addWindowListener(listenerAdapter);
                
                adapterFrame.addWindowListener(new WindowAdapter() {

                    public void windowClosing(WindowEvent e) {
                        System.out.println("Terminator--windowClosing");
                    }
                });

                adapterFrame.setVisible(true);
            }
        });
    }
}

class AdapterFrame extends JFrame {

    public AdapterFrame() {
        setTitle("AdapterTest");
        setSize(DEFAULT_WIDTH, DEFALUT_HEIGHT);

        adapterPanel = new JPanel();

        add(adapterPanel);
    }
    private JPanel adapterPanel;
    public static final int DEFAULT_WIDTH = 300;
    public static final int DEFALUT_HEIGHT = 200;
}

class TerminatorAdapter extends WindowAdapter {

    public void windowClosing(WindowEvent e) {
        System.out.println("TerminatorAdapter---windowClosing");
    }
}

class TerminatorListener implements WindowListener {

    public void windowClosing(WindowEvent e) {
        System.out.println("TerminatorListener--windowClosing");
    }

    @Override
    public void windowOpened(WindowEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowClosed(WindowEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowIconified(WindowEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowActivated(WindowEvent e) {
        //  throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        //  throw new UnsupportedOperationException("Not supported yet.");
    }
}

运行结果:

关闭AdapterTest窗口,显示结果:

TerminatorListener--windowClosing
TerminatorAdapter---windowClosing
Terminator--windowClosing
RPMsg:协议简介 两台计算机可以通过TCP/IP进行通信,那么同一颗芯片上的两个核心怎么通信呢? 阅读详情

相关推荐

DeepSeek的训练与优化流程

DeepSeek的训练体系不仅追求极致的计算效率,更注重将物理规律、人类知识、安全伦理深度融入训练过程,其"效率-安全-可解释性"三角平衡的设计理念,为行业提供了重要参考范式。

m0_56896669的博客 1438

JAVA:事件监听器之WindowAdapter类(针对窗口事件)

转载:JAVA:事件监听器之WindowAdapter类(针对窗口事件) - KeenLeung - 博客园 (cnblogs.com) WindowAdapter类: 1.接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。 2.扩展此类可创建WindowEvent侦听器并为所需事件重写该方法。(如果要实现WindowListener接口,则必须定义该接口内的所有方法。此抽象类将所有方法都定义为 null,所以只需针对关心的事件定义方法。) 3.使用扩展的类可...

m0_56231540的博客 2813

5分钟搞定:用Pyannote和Whisper实现带说话人分离的语音转文字(附完整代码)

本文详细介绍了如何快速构建一个集成了说话人分离功能的语音转文字系统。通过结合OpenAI的Whisper模型进行高精度语音识别和Pyannote模型实现说话人分离,并提供了完整的代码实现、环境搭建指南以及核心的对齐与合并逻辑,帮助开发者高效处理会议录音、访谈等多说话人音频,实现自动化转录。

threejs5artist的博客 636

WindowAdapter适配器(一)

import java.awt.*; import java.awt.event.*; class MyFrame extends Frame{ TextArea text; Boy police; MyFrame(String s){ super(s); police = new Boy(this); setBounds(100,

wuxinliulei的专栏 2301

告别FreeRTOS?手把手带你用NuttX在STM32F4-Discovery上跑起第一个Shell

本文详细介绍了如何在STM32F4-Discovery开发板上从FreeRTOS迁移到NuttX,并运行第一个Shell。NuttX以其完整的POSIX兼容性和模块化架构优势,特别适合复杂网络应用的开发。通过环境搭建、移植配置、调试技巧及POSIX开发实践,帮助开发者高效构建嵌入式系统。

weixin_42526417的博客 302

S32K144后门密钥实战:如何用JLINK脚本绕过复位陷阱更新加密固件

本文详细介绍了在S32K144微控制器上,如何利用JLINK脚本绕过调试器默认复位陷阱,实现通过后门密钥安全更新加密固件的实战方案。针对汽车电子现场维护中常见的“解锁-复位-锁定”循环问题,文章提供了完整的JLinkScript定制方法、批处理工具及故障排除指南,帮助工程师高效完成固件升级。

weixin_29175469的博客 147

WindowAdapter类使用

 Java中,当我们要实现一个 WindowListener 接口,则必须定义该接口内的所有方法。(该接口中的方法比较多)。那么能不能让我们只重写自己的程序需要的部分呢?  当然是可以的,这里就要用到我们的WindowAdapter类。 1.接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。 2.扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法...

qq_44848423的博客 2649

从硬件拆解到图像生成:一次搞懂MRI设备(主磁体、梯度线圈、射频系统)是如何协同工作的

本文深入解析MRI设备的三大核心系统——主磁体、梯度线圈和射频系统如何协同工作,实现从量子现象到诊断图像的转化。通过详细的技术参数和临床案例,揭示磁共振成像(MRI)在医疗图像处理中的精密工程原理和最新技术突破,帮助读者全面理解这一现代医学影像技术的运作机制。

weixin_33734785的博客 551

适配器模式---adapter

适配器模式 定义: 《设计模式》一书中是这样给适配器模式定义的:将一个类的接口转换成客户希望的另外 一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 生活实例: 充电器,美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 笔记本电脑接交流电源时需要一个电源适配器 计算机访问照相机的 SD 内存卡时需要一个读卡器等。 在 LINUX 上运行 WINDOWS 程序。 组成: 分类: 在《设计模式》一书中将适配器模式分为类适配器

时光里的博客 544

一文吃透!C#上位机CAN总线通信开发:从协议解析到数据可视化

CAN底层协议仅定义了8字节数据的传输规则,实际业务需自定义应用层协议,实现多类型数据的有序传输,这是数据解析的核心。仲裁ID(16进制)数据长度(DLC)数据场格式业务含义解析规则0x0014字节0~3:温度数据温度采集(单位:℃)4字节→float类型(大端/小端需统一,如西门子PLC格式)0x0022字节0~1:转速数据电机转速(单位:r/min)2字节→short类型(Int16)0x0031字节0:bit0~bit7设备状态(8路开关量)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 848

详解vit_base_patch16_224

ViT-Base模型的核心思想是将输入图像划分为多个小块(patches),并使用Transformer架构来处理这些小块。具体来说,ViT-Base使用16x16像素的patch大小,输入图像的尺寸为224x224像素,这意味着每张图像将被划分为49个patch(22416×22416=14×14=19616224​×16224​=14×14=196个patch)。ViT-Base(ViT-B/16)通过将图像处理任务转化为序列处理任务。

具身机器人和通用AI 3230

java中JFrame类中函数addWindowListener(new WindowAdapter)

addWindowFocusListener

qq_45890741的博客 1776

前端build工程的时候 出现 `build.rollupOptions.external 的解决方法

看到这个Bug,理性分析: 遇到 Rollup failed to resolve import “@vue/devtools-api” 错误可能是由于 Pinia 使用了 @vue/devtools-api 模块,而 Vite 的 Rollup 插件无法解析这个模块 ps:但是我前一秒还可以,加了个别代码,突然不行,我是不相信的 = - =

码农研究僧的博客 3056

WindowAdapter适配器类

WindowAdapter适配器类 //转载    Java WindowAdapter适配器类     并不是所有的事件处理都像按钮点击那样简单。在正规的程序中,往往希望用户在确认没有丢失所做工作之后再关闭程序。当用户关闭框架时,可能希望弹出一个对话框来警告用户没有保存的工作有可能会丢失,只有在用户确认之后才退出程序。   当程序用户试图关闭一个框

evilcry2012的专栏 1285

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

《Java核心技术 卷I》图形界面事件处理适配器类

并不是所有的事件处理都像按钮点击那样简单,假设你想监视用户何时想要关闭主窗体,可能希望弹出一个对话框,只有在用户确认之后才退出程序。当程序试图关闭一个窗口时,JFrame对象就是WindowEvent的事件源,如果希望捕获这个事件,就必须有一个合适的监听器对象,并将它添加到窗体的窗口监听器列表中。

输入知识,消化知识,输出知识,分享知识,教人让我学习更好,业精于勤荒于嬉,行成于思毁于随 466

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java鼠标监听器适配器_Java GUI:事件监听器 和 事件适配器 | 学步园

/*事件监听器:一个事件监听器对象负责处理一类事件一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理.在事件源和事件监听器对象中进行约定的接口类,被成为事件监听器接口.事件监听器接口类的名称与事件类的名称是相对应的,例如MouseEvent事件类的监听器接口名为MouseListener.处理发生在某个GUI组件上的XXXEvent事件的某种情况,其事件处理的通用编写流程:编写一...

weixin_39800957的博客 633

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

适配器模式

  适配器应用广泛,比如我去马代看海就得带着适配器去,要不然手机就没法充电了。因为人家电压是240伏,插座是三孔方形的,需要一个转换器变成220伏,这时才可以使用插入两脚的充电插头。这个转换器就是适配器,很明显,适配器的作用就是负责兼容A和B两种原来不能直接互相交互的接口。适配器模式也是同样的道理,当A接口不能直接调用B接口时,我们通过适配器模式来转换一下。看个具体例子:   我们把Windo...

wuxun1997的专栏 115

awt--事件适配器--比如WindowAdapter

事件适配器 1 抽象类 implements 事件监听器,但是里面具体的方法全部空实现,可以实现多个监听器 2 用户继承 事件适配器类 ,按照需要实现自己的方法。 /* 事件适配器原理 * * 事件适配器--》实现事件监听器接口 * * 但是是空实现,所有实现的方法体里面没有语句,或者就是一个分号; * * 用户再继承事件适配器,需要哪个方法就编写哪个方法 *

为谁写代码 586

java小白——通过适配器实现关闭窗口

package gui.awt; import java.awt.Frame; import java.awt.Window; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class Test7 { public static void main(String[] args) ...

weixin_45174208的博客 283

java之适配器模式

interface Window { public void open(); public void close(); public void activated(); public void iconified(); public void deiconified(); } abstract class WindowAdapter im...

weixin_30872733的博客 60

设计模式 - 适配器模式 ( Adapter / Wrapper )

包装器 / 接口转换器 常见的例子 电压转接头 java.io jdbc-odbc bridge ( 不是桥接模式) ASM transformer Java只能调用JDBC接口, 而SQLServer提供的是odbc, 这中间有一层转换,就是适配器模式: JDBC-ODBC-Bridge BufferedReader不能直接调用InputStream, 所以中间搞了个Adapter(reader)用于适配 java.io的这种模式也能称作装饰器模式, 设计模式就是这样, 有时候是混杂的 误区

weixin_42254177的博客 201

设计模式--适配器模式

讨论java的WindowAdapter,这就是一种设配器模式  类适配器:提供一个实现目标接口的类,这个类(或者抽象类)提供了目标接口的部分或全部接口方法的默认是人,通过创建适配类的子类来实现目标接口。 举例: 下面这段代码 通过匿名内部类的方式创建适配器类的匿名子类

210

JAVA自学笔记25

JAVA自学笔记25 1、GUI 1)图形用户接口,以图形的方式,来显示计算机操作的界面,更方便更直观 2)CLI 命令行用户接口,就是常见的Dos,操作不直观

Tanqurey的博客 246

接口(适配器)

   package workhome; public class WindowDemo { public static void main(String[] args) { //匿名内部类对象,方法链编程 new Window().addListener(new WindowAdapter() { public ...

weixin_30389003的博客 174

JavaLearning:适配器设计 接口和抽象类

interface Window{ public void open(); public void close(); public void icon(); public void unicon(); }; abstract class WindowAdpater implements Window{ public void open(){} public void cl

Anonymous 801

java如何创建监听器类_Java中怎样添加一个非本类的监听器?

importjava.awt.*;importjava.awt.event.*;publicclassAddDemoextendsFrameimplementsActionListener//实现相应接口{Labell1,l2;TextFieldt1,t2,t3;Buttonb;publicAddDemo(){l1=newLa...import java.awt. *;import java.aw...

weixin_39622760的博客 262
上一篇: Java 改变观感
下一篇: Java Action 动作
银月术
博客等级 码龄17年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值