Swing程序设计(11)动作事件监听器,焦点事件监听器

文章目录

  • 前言
  • 一、事件监听器是什么?
  • 二、详细展开
    • 1.动作事件监听器
    • 2.焦点事件监听器
  • 总结

前言

        如果你是坚持从Swing程序第一篇看到了这里,恭喜你,Swing程序设计简单地落下了帷幕,关于Swing程序更深的了解,可以自行学习。回到正文,我们之前写的那么多Swing的组件的使用,但是这些组件并没有在窗体中实现什么功能。于是,有了这篇事件监听器的文章。


一、事件监听器是什么?

        JAVA的Swing事件模型由三个部分组成:事件源,事件,监听程序

        通俗来讲,事件源就是组件本身,监听程序就是知晓事件发生时可做出反应的程序。程序员创建界面上的组件,用户操作界面产生事件,监听程序做出对应的回应。

        所以,组件必须添加或移除监听程序,不然组件就是个假摆设,用户使用组件时不能做出回应。

        组件想要添加或移除相应的事件监听器都要使用以下方法(组件添加移除事件监听器,都要用内部类来解决这个问题,下面的实例展示都会显示这一点):

module.addActionListener();
//给组件module添加动作监听器module.removeActionListener();
//给组件module移除动作监听器module.addFocusListener();
//给组件module添加焦点监听器module.removeFocusListener();
//给组件module移除焦点监听器

二、详细展开

1.动作事件监听器

        动作事件(ActionEvent)监听器是Swing程序中比较常用的事件监听器。它可以监听所有按钮,所有框发生的事件,并编写代码对其事件的发生做出反应。下面直接实例展示如何使用。

        (1)按钮:

JButton btn = new JButton("神秘按钮");
btn.addActionListener(new ActionListener() {    //给组件btn添加动作事件监听器,创建动作监听器对象,创建匿名内部类public void actionPerformed(ActionEvent e){//实现ActionListener接口的"事件执行"方法,当组件被触发对应事件后,将运行该方法中的代码jl.setText("神秘按钮已被点击,开始格式化,Boom!");}
});add(btn);

         以按钮为例,创建一个按钮组件,通过addActionLisener()方法,给按钮组件添加事件监听。在方法中,以匿名内部类的形式,实现,实例化ActionListener()接口,创建出一个事件监听对象。在匿名内部类中,实现接口的actionPerformed(ActionEvent e)方法,只要监听事件对象 e 捕获到对应组件的事件,就会执行actionPerformed(ActionEvent e)中的代码。

        该按钮事件的运行显示:

        

        点击按钮

          

 

        (2) 下拉框:

String idcard[] ={"身份证","学生证","驾驶证"}; 
JComboBox<String> jcb = new JComboBox<String>(idcard);
jcb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){JComboBox<String> cb = (JComboBox<String>)e.getSource();String selectText = (String)cb.getSelectedItem();jl.setText("输入的信息为:"+selectText);}
}); 
add(jcb);

        该组件的运行显示:

点击下拉框选项 

 

        用户选中什么选项,标签就会显示相应的内容

        动作事件对象 e 获取事件源对象,即触发事件的JComboBox对象,并将其强制转换为JComboBox<String>类型的变量cb。然后,通过调用getSelectedItem()方法获取当前选中的选项,并将其强制转换为String类型的变量selectText。最后,将获取到的选项文本设置到一个文本标签jl中,显示在界面上。

        (3)文本框:

JTextField jtf = new JTextField(10);jtf.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){jl.setText("该信息已保存系统");}});
add(jtf);

        该组件的运行显示:

 

按下回车键后 

 

        (4)单选按钮 

JRadioButton jcn1 = new JRadioButton("男性");
JRadioButton jcn2 = new JRadioButton("女性");ButtonGroup group = new  ButtonGroup();
group.add(jcn1);
group.add(jcn2);jcn1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){jl.setText("系统:该信息已标记为男性");}
});jcn2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){jl.setText("系统:该信息已标记为女性");}
});add(jcn1);
add(jcn2);

         该组件的运行显示:

 点击单选按钮

 

2.焦点事件监听器

        焦点事件(FocusEvent)监听器在实际项目开放中也应用广泛。例如,光标焦点离开一个文本框时,需要弹出一个对话框。或者光标离开文本框时,需要对应的标签内容发生改变。下面直接实例展示如何使用,与动作事件监听器大差不差。

//省略不必要代码......JTextField jf = new JTextField(10);JLabel jl = new JLabel("此文本框失去焦点");   add(jf);add(jl);jf.addFocusListener(new FocusListener() { //给组件添加一个焦点监听器//实现FocusListener接口的两个方法:focusGained() 和 focusLost()public void focusGained(FocusEvent e){jl.setText("此文本框获得焦点");jf.setBorder(BorderFactory.createLineBorder(Color.green));//该方法用于设置文本框边界的颜色 }public void focusLost(FocusEvent e){jl.setText("此文本框失去焦点");jf.setBorder(BorderFactory.createLineBorder(Color.red));}});//------------------------------------------------------------------------      JTextField jf2 = new JTextField(10);JLabel jl2 = new JLabel("此文本框失去焦点");add(jf2);add(jl2);jf2.addFocusListener(new FocusListener() {//给组件添加一个焦点监听器//实现FocusListener接口的两个方法:focusGained() 和 focusLost()public void focusGained(FocusEvent e){jl2.setText("此文本框获得焦点");jf2.setBorder(BorderFactory.createLineBorder(Color.green));}public void focusLost(FocusEvent e){jl2.setText("此文本框失去焦点");jf2.setBorder(BorderFactory.createLineBorder(Color.red));}});//--------------------------------------------------------------------------JTextField jf3 = new JTextField(10);JLabel jl3 = new JLabel("此文本框失去焦点");add(jf3);add(jl3);jf3.addFocusListener(new FocusListener() {//给组件添加一个焦点监听器//实现FocusListener接口的两个方法:focusGained() 和 focusLost()public void focusGained(FocusEvent e){jl3.setText("此文本框获得焦点");jf3.setBorder(BorderFactory.createLineBorder(Color.green));}public void focusLost(FocusEvent e){jl3.setText("此文本框失去焦点");jf3.setBorder(BorderFactory.createLineBorder(Color.red));JOptionPane.showMessageDialog(null,"第三文本框失去焦点");//该方法可使在文本框获得或失去焦点时,弹出对话框}});//省略不必要代码......

        添加焦点监听器后,对于FocusListener接口,在匿名内部类中要实现的抽象方法两个,focusGained() 和 focusLost()方法,这两个方法分别为:获得焦点后被调用的方法,失去焦点时被调用的方法。

        运行展示:

点击第一行文本框

 点击第二行文本框

 

                                                               第三行文本框失去焦点                                                         

JOptionPane.showMessageDialog(null,"第三文本框失去焦点");

JOptionPane.showMessageDialog(null,String);
该方法可使在文本框获得或失去焦点时,弹出对话框


总结

        以上就是今天涉及的内容,本文简单介绍了动作事件监听器和焦点事件监听器,而它们在UI设计和java前端的作用是涉猎广泛且基础的,并且提供了大量能使我们快速便捷地处理界面交互的函数和方法。

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

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

相关文章

MySQL性能优化-范式设计和反范式设计

范式化设计 范式化设计背景 范式是数据表设计的基本原则&#xff0c;又很容易被忽略。很多时候&#xff0c;当数据库运行了一段时间之后&#xff0c;我们才发现数据表设计得有问题。重新调整数据表的结构&#xff0c;就需要做数据迁移&#xff0c;还有可能影响程序的业务逻辑…

【Axure高保真原型】输入宽高控制图片尺寸

今天和大家分享输入图片宽高控制图片尺寸的原型模板&#xff0c;在输入框里输入图片的宽和高&#xff0c;图片会自动设置成对应数值的尺寸&#xff0c;包括了按比例或者自由设置两种方式&#xff0c;具体效果可以观看下方视频或者打开预览地址体验。 【原型效果】 【Axure高保…

数据库SQLite

1.简单创建一个数据库和删除一个数据库 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:orientation"vertical">&l…

wordpress外贸独立站

WordPress外贸电商主题 简洁实用的wordpress外贸电商主题&#xff0c;适合做外贸跨境的电商公司官网使用。 https://www.jianzhanpress.com/?p5025 华强北面3C数码WordPress外贸模板 电脑周边、3C数码产品行业的官方网站使用&#xff0c;用WordPress外贸模板快速搭建外贸网…

Windows Media Player (Win10)

Windows Media Player &#xff08;Win10&#xff09;服务器运行失败 先关闭掉【Windows Media Player】组件&#xff0c;但是要重启计算机 重启计算机后&#xff0c;再开启【Windows Media Player】组件√起来 可以使用了&#xff01;&#xff01;&#xff01;

前缀和和差分以及练习题目

蓝桥杯备赛系列 倒计时50天&#xff01; 前缀和和差分 知识点 前缀和数组&#xff1a; 假设原数组用a[i]表示&#xff0c;前缀和数组用sum[i]表示&#xff0c;那么sum[i]表示的是原数组前i项之和&#xff0c;注意一般用前缀和数组时&#xff0c;原数组a[i]的有效下标是从1开…

最强照片AI无损放大工具

使用人工智能的能力来放大图像&#xff0c;同时为惊人的结果添加自然的细节。 使用深度学习技术&#xff0c;A.I.GigaPixEL可以放大图像并填满其他调整大小的产品所遗漏的细节。 下载地址&#xff1a;最强照片AI无损放大工具.zip

太阳能供电井盖-物联网智能井盖监测系统-旭华智能

在这个日新月异的科技时代&#xff0c;城市的每一个角落都在悄然发生变化。而在这场城市升级的浪潮中&#xff0c;智能井盖以其前瞻性的科技应用和卓越的安全性能&#xff0c;正悄然崭露头角&#xff0c;变身马路上的智能“眼睛”&#xff0c;守护城市安全。 传统的井盖监测系统…

展示模型展台的高度一般为多少---模大狮模型网

展示模型展台的高度一般取决于多个因素&#xff0c;包括展示物品的大小、展台的设计风格、展览场地的限制等。一般来说&#xff0c;展示模型展台的高度可以根据以下几点考虑&#xff1a; 展示物品的大小&#xff1a;如果展示物品比较大或需要竖立展示&#xff0c;展台的高度可能…

【学位论文】上海交通大学 研究生学位论文 本地保存

上海交大研究生学位论文网&#xff1a;http://thesis.lib.sjtu.edu.cn/ &#xff08;只能校内访问或SJTU VPN访问&#xff09; 如果希望下载论文&#xff0c;需要参考&#xff1a;https://github.com/olixu/SJTU_Thesis_Crawler 安装过程 安装过程的几个坑&#xff1a; &a…

【Redis】RedisTemplate和StringRedisTemplate的区别

两者的关系是 StringRedisTemplate 继承 RedisTemplate 。 两者的数据是不共通的&#xff1a;也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据&#xff0c;RedisTemplate 只能管理 RedisTemplate 中的数据。 RedisTemplate 看这个类的名字后缀是 Temp…

Cesium实战三:飞行航线动画

飞行航线追踪 可视化从旧金山到哥本哈根的真实航班。 1、获取点位数据&#xff1a;构建飞行跟踪器 – Cesium (cesium.com) 2、在地图上添加飞行点位&#xff1a;循环遍历点位数据&#xff0c;利用Entity直接添加点至地图上。 //添加飞行点位 const addFlightPoint () >…

彻底搞懂CPU特权级

程序员在用户程序开发过程中,会遇到两个基本概念即用户态和内核态&#xff0c;我们所说的模式切换&#xff0c;就是用户态和内核态之间的切换。 用户态和内核态其实是CPU的特权级&#xff0c;所以模式的切换就是CPU特权级的切换&#xff0c;模式等同于特权级&#xff0c;不同的…

Cesium 问题:[Violation]‘requestAnimationFrame‘ handler took 58ms

文章目录 问题分析解决问题 Cesium 在引入页面后,控制台弹出提示信息: [Violation]requestAnimationFrame handler took 58ms分析 这个警告信息表明使用 requestAnimationFrame 方法时,其处理函数执行所需的时间超过了一定阈值,从而触发了警告。requestAnimationFrame 方…

Java+SpringBoot:制造企业质量管理的双引擎

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

mysql高可用架构设计

一、主从架构 主从架构一般如下所示 这里从节点一般设置成只读&#xff08;readonly&#xff09;模式。这样做&#xff0c;有以下几个考虑&#xff1a; 有时候一些运营类的查询语句会被放到备库上去查&#xff0c;设置为只读可以防止误操作&#xff1b; 防止切换逻辑有 bug&a…

Linux——进程池

Linux——进程池 池化技术进程池信道模拟任务进程退出一个bug 今天我们来学习一下管道的应用——进程池。如果有没看过上一篇管道的小伙伴可以点击这里&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136371517 池化技术 我们首先要了解一下池化技术&#x…

StarRocks实战——特来电StarRocks应用实践

目录 一、为何引入StarRocks 二、主要应用场景 三、封装或扩展 四、集群监控预警 五、总结规划展望 5.1 使用经验分享 5.2 下一步计划 5.2.1 StarRocks集群自动安装 5.2.2 StarRocks集群高可用架构 原文大佬的这篇StarRocks应用实践有借鉴意义&#xff0c;这里摘抄下来…

Socket网络编程(三)——TCP快速入门

目录 概述TCP连接可靠性1. 三次握手过程2. 四次挥手过程3. 为什么挥手需要四次&#xff1f; 传输可靠性TCP核心APITCP传输初始化配置&建立连接客户端创建Socket建立连接服务端创建ServerSocket监听连接ServerSocket 和 Socket的关系 Socket基本数据类型传输客户端数据传输服…

AI芯片行业深度:发展现状、竞争格局、市场空间及相关公司深度梳理

从广义上讲只要能够运行人工智能算法的芯片都叫作AI芯片&#xff0c;但通常意义上的AI芯片指的是针对人工智能算法做了特殊加速设计的芯片。AI芯片也被称为AI加速器或计算卡&#xff0c;即专门用于处理人工智能应用中的大量计算任务的模块&#xff08;其他非计算任务仍由CPU负责…