Java中的事件(动作监听-ActionListener)

news2024/9/23 23:35:16

(一)、ActionListener接口

ActionListener接口用于处理用户界面上的动作事件,例如:按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法,该方法会在动作发生时被调用。

(二)、两种方式为按钮或者菜单等添加动作监听事件

1、 使用匿名内部类的形式

使用匿名内部类的形式为按钮添加动作监听时,每一个按钮添加的事件要写一个匿名内部类,适用于单个事件
例如:
下面有一个JFrame(MyJFrame继承JFrame)和一个测试类用于创建窗口:
MyJframe:

public class MyJFrame extends JFrame {
    JButton jtb1 = new JButton("点我啊");

    public MyJFrame() {
        this.setSize(603, 680);
        this.setTitle("按钮点击事件测试");
        this.setLayout(null);   取消默认组件的居中放置,只有取消了,组件在界面中才会按照XY轴的形式添加
        //设置按钮宽高和位置
        jtb1.setBounds(0, 0, 100, 50);

        //给按钮绑定鼠标事件
        jtb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("我被点击了");
            }
        });


        //将按钮添加到整个界面中
        this.getContentPane().add(jtb1);
        this.setVisible(true);
    }
}

重点详解:
在MyJFrame类中创建了按钮“jtb1”,然后经过简单的位置和大小设置后,给按钮绑定了鼠标动作监听事件

jtb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("我被点击了");
            }
        });

jtb1.addActionListener 表示要给按钮jtb1 添加ActionListener事件,addActionListener()方法中的参数是ActionListener接口对象,这里将ActionListener接口的实现类对象作为参数传递进去后,addActionListener方法体中就会调用所传递的参数的actionPerformed方法,这里用到了接口多态的概念。
所以将使用该匿名内部类作为参数进行传递,然后会执行actionPerformed方法,在该方法中写入动作发生后的逻辑

测试类:

public class MyJFrameTest {
    public static void main(String[] args) {
        new MyJFrame();
    }
}

执行后打开窗口如下所示
在这里插入图片描述

当点击按钮后控制台会打印出点击后的事件
在这里插入图片描述

2、 本类实现ActionListener接口的形式

让MyJFrame实现ActionListener接口,本类中要重写接口中的所有方法,当按钮绑定事件后被点击后,会执行actionPerformed方法
例如:
下面有一个JFrame(MyJFrame继承JFrame并实现了ActionListener接口)和一个测试类用于创建窗口:
MyJframe:

public class MyJFrame extends JFrame implements ActionListener{
    JButton jtb1 = new JButton("按钮1");
    JButton jtb2 = new JButton("按钮2");

    public MyJFrame() {
        this.setSize(603, 680);
        this.setTitle("按钮点击事件测试");
        this.setLayout(null);   取消默认组件的居中放置,只有取消了,组件在界面中才会按照XY轴的形式添加
        //设置按钮宽高和位置
        jtb1.setBounds(0, 0, 100, 50);
        jtb2.setBounds(100, 0, 100, 50);

        //给按钮绑定鼠标事件
        jtb1.addActionListener(this);
        jtb2.addActionListener(this);


        //将按钮添加到整个界面中
        this.getContentPane().add(jtb1);
        this.getContentPane().add(jtb2);

        this.setVisible(true);


    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==jtb1){
            System.out.println("按钮1被点击了");

        } else if (e.getSource()==jtb2) {
            System.out.println("按钮2被点击了");
        }
    }
    
}

重点详解:
在MyJFrame类中创建了两个按钮jtb1jtb2,然后经过简单的位置和大小设置后,给两个按钮绑定了鼠标动作监听事件,jtb1.addActionListener(this);为什么传递的参数是this呢,即本类对象。
首先MyJFrame实现了ActionListener接口,然后也重写了接口中的方法actionPerformed(ActionEvent e)方法。那么MyJFrame就成为了ActionListener接口的实现类,而在addActionListener()方法中所要传递的参数本就是ActionListener接口的实现类,所以当MyJFrame实现了接口后,在按钮绑定监听事件后只需要将本类对象作为参数进行传递就行了,然后当按钮被点击后,就会调用接口的实现类(也就是本类)的对象中的actionPerformed方法。
然后e.getSource()去获得是哪个按钮,进行判断,根据不同的按钮事件进行不同的逻辑处理。

测试类:

public class MyJFrameTest {
    public static void main(String[] args) {
        new MyJFrame();
    }
}

执行后打开窗口如下所示
在这里插入图片描述
当点击按钮1会执行System.out.println(“按钮1被点击了”);
当点击按钮2会执行System.out.println(“按钮2被点击了”);
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苍穹外卖上半部分总结

苍穹外卖一个很经典的项目 虽然已经烂大街,但项目依旧是很优秀,并且代码十分规范,很值得学习。 前置介绍 niginx反向代理 前端和后端的url请求不一致的原因:前端是请求到nginx服务器,再由nginx服务器转发到后端 ngi…

个人防护装备检测系统源码分享

个人防护装备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

字母与符号检测系统源码分享

字母与符号检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

全国职业院校技能大赛(大数据赛项)-平台搭建Spark、Scala笔记

Spark作为一个开源的分布式计算框架拥有高效的数据处理能力、丰富的生态系统、多语言支持以及广泛的行业应用。Scala是一种静态类型的编程语言,它结合了面向对象编程和函数式编程的特性,被誉为通用的“大数据语言”。而二者的结合更能迸发出新奇的化学反…

深度学习之微积分预备知识点(2)

极限(Limit) 定义:表示某一点处函数趋近于某一特定值的过程,一般记为 极限是一种变化状态的描述,核心思想是无限靠近而永远不能到达 公式: 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

itextsharp报错 PdfReader not opened with owner password

itextsharp报错 PdfReader not opened with owner password itextsharp读取PDF时报错: PdfReader not opened with owner password 报错原因(据说是):pdf 文件设置了加密。 网上搜索了一下,查到大多数答案是: 在创建pdfReader…

JDK7u21 HashMap版

今天在搞ROME HotSwappableTargetSource链的时候突然发现,JDK7U21反序列化链不仅HashMap.put触发了key.equals putForCreate也调用了 而且HashMap.readObject直接调用了putForCreate来还原 what?直接向HashMap两个put不就完了,还搞什么HashSet 开弄&am…

闪回科技再冲刺上市:曾夸大融资规模,毛利率下滑,有股东退出

近日,闪回科技有限公司(下称“闪回科技”)递交招股书,准备在港交所主板上市。据贝多财经了解,该公司曾于2024年2月递表,此次是“失效”后的更新版本,清科资本为其独家保荐人。 闪回科技在招股书…

5款好用的电脑软件,个个良心实用

分享5款好用但冷门的windows软件,个个良心实用,而且大部分免费,值得统统装进电脑里! 1、EagleGet——高速下载器 一款免费的高速下载软件,页面设计简洁,没有广告,支持 HTTP、HTTPS、FTP、MMS、…

​数据库: MyBatis-Plus

MyBatis-Plus MyBatis-Plus 是 MyBatis 的增强工具,核心作用是简化 CRUD 操作和提升开发效率。它提供基础的增删改查方法、分页插件、条件构造器以及代码生成器,帮助减少重复代码量。MyBatis-Plus 不支持自动建表,专注于简化数据库操作&…

QT中添加资源文件

什么是资源文件 项目中经常需要添加图片、‌音频、‌视频、翻译文件等文件,在QT中,这些文件会放在 .qrc 文件中来被使用。 .qrc 文件是一个XML格式的资源集合描述文件,是Qt中用于定义和管理资源的关键文件 如何使用 创建资源文件 在你的Qt项…

面试真题:谈一谈Mysql的分库分表

分表和分库是什么?有什么区别? 分库是一种水平扩展数据库的技术,将数据根据一定规则划分到多个独立的数据库中。每个数据库只负责存储部分数据,实现了数据的拆分和分布式存储。分库主要是为了解决并发连接过多,单机 my…

一行命令,一分钟轻松搞定SSL证书自动续期

httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 服务器设计。已服务众多中小企业,稳定、安全、可靠。现在的网站SSL免费证书有效期只有3个月,所以就会有经常更快SSL证书的需求,如果手上需要更换的SSL证书比较多的情况下…

DoppelGanger++:面向数据库重放的快速依赖关系图生成

doi:DoppelGanger: Towards Fast Dependency Graph Generation for Database Replay,点击前往 文章目录 1 简介2 架构概述3 依赖关系图3.1 符号和问题定义3.2 无 IT(k) 图3.3 无 OT 图表3.4 无 OTIT 图表3.5 无 IT[OT] 图表3.6 输出确定性保证 4 重复向后…

win10 win11 设置文件权限以解决Onedrive不能同步问题

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

蓝牙AOA基站助力打造智慧医院管理系统

随着科技的飞速发展,智慧医院的概念逐渐深入人心。其中,蓝牙AOA(到达角)定位技术以其高精度、低功耗、低成本等优势,在智慧医院建设中扮演着重要角色。本文将深入探讨蓝牙AOA基站如何助力智慧医院的建设与发展。 一、蓝…

CVE-2024-4956实战

一、访问网页 二、公司信息域名收集 三、抓包读取敏感文件 Burpsuite抓包,修改GET请求即可(GET /%2F%2F%2F%2F%2F%2F%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1 )

点赞系统实现

点赞功能是社交、电商等几乎所有的互联网项目中都广泛使用。虽然看起来简单,不过蕴含的技术方案和手段还是比较多的。 下面将分享之前做的判题OJ系统的点赞系统的思路。 1.需求分析 点赞功能与其它功能不同,没有复杂的原型和需求,仅仅是一…

shardingjdbc介绍

文章目录 1、shardingjdbc介绍1.1、读写分离、数据分片(分库分表)中间件:1.1.1、shardingsphere1.1.2、mycat 2、shardingjdbc-demo搭建2.1、创建项目2.2、添加依赖2.3、application.yml2.4、创建实体类 User2.5、创建 UserMapper2.6、创建测…

筛子排序(SieveSort)

当你手头有了支持AVX-512(SIMD)的i9-11900K,你最想做什么? i9-11900K?现在都14代了,谁还用11代的? 但12代以上就没有AVX-512了! AVX-512有什么特别之处?有了这个硬件支…