当前位置: 首页 > news >正文

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前端的作用是涉猎广泛且基础的,并且提供了大量能使我们快速便捷地处理界面交互的函数和方法。

相关文章:

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

文章目录 前言一、事件监听器是什么&#xff1f;二、详细展开 1.动作事件监听器2.焦点事件监听器总结 前言 如果你是坚持从Swing程序第一篇看到了这里&#xff0c;恭喜你&#xff0c;Swing程序设计简单地落下了帷幕&#xff0c;关于Swing程序更深的了解&#xff0c;可以自行学习…...

Python 开发图形界面程序

用 Python 语言开发图形界面的程序&#xff0c;有2种选择&#xff1a; Tkinter 基于Tk的Python库&#xff0c;这是Python官方采用的标准库&#xff0c;优点是作为Python标准库、稳定、发布程序较小&#xff0c;缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…...

百度搜索引擎SEO优化方法

随着互联网的不断发展&#xff0c;搜索引擎已经成为人们获取信息、产品和服务的主要途径之一。而在中国&#xff0c;百度作为最大的搜索引擎&#xff0c;其影响力不可忽视。了解并掌握百度SEO关键词优化方法&#xff0c;对于提升网站在搜索引擎中的排名至关重要。 关键词选择&a…...

一文了解docker与k8s

随着 k8s 作为容器编排解决方案变得越来越流行&#xff0c;有些人开始拿 Docker 和 k8s 进行对比&#xff0c;不禁问道&#xff1a;Docker 不香吗&#xff1f; k8s 是 kubernetes 的缩写&#xff0c;8 代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手两者相互依存…...

Linux基础——进程控制

1. 进程创建 在这之前我们曾了解过进程创建&#xff08;详见进程初识&#xff08;二&#xff09;&#xff09;&#xff0c;我们在这里对fork函数做一些补充 其实对于父子进程来说&#xff0c;若是有一方试图修改数据时&#xff0c;会向物理内存中申请一份新空间&#xff0c;并…...

网络工程师笔记8

华为VRP系统 设备管理方式 web管理方式 命令行管理方式 修改命令&#xff1a;undo 基础配置命令...

从零学算法128

128.给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4…...

2024免费mac苹果电脑的清理和维护软件CleanMyMac X

对于 Mac 用户来说&#xff0c;电脑的清理和维护是一件让人头疼的事情。但是&#xff0c;有了 CleanMyMac X&#xff0c;这一切都将变得轻松愉快。CleanMyMac X 是一款专为 Mac 设计的电脑清理软件&#xff0c;它以其强大的功能和简单的操作&#xff0c;让无数用户为之倾倒。 C…...

Python反射机制在实际场景中的应用

Python 的反射机制是指在运行时动态地访问、检测和修改类和对象的属性和方法。反射为开发者提供了一种灵活的方式来处理对象和类&#xff0c;可以在实际场景中提供一些有用的功能和应用&#xff0c;下面是 Python 反射在实际场景中的一些常见应用&#xff1a; 插件系统&#xf…...

网络原理初识

一、IP地址 概念 IP 地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址。简单说&#xff0c; IP 地址用于定位主机 的网络地址 。 就像我们发送快递一样&#xff0c;需要知道对方的收货地址&#xff0c;快递员才能将包裹送到目的地。 二、…...

关于uniapp小程序的分包问题

开发uniapp小程序时&#xff0c;在打包上传代码时会出现超出2M的打包限制不能上传&#xff0c;那么我们该怎么做呢&#xff1f; 1.对于图片&#xff0c;将图片从后端服务取&#xff0c;尽量不要放在静态资源&#xff0c;图片体积会影响打包大小。 2.使用分包&#xff0c;tabb…...

MySQL:索引的优化方法

索引是帮助存储引擎快速获取数据的一种数据结构&#xff0c;形象的说就是索引是数据的目录。 索引创建的时机&#xff1a; 索引并不是越多越好的&#xff0c;虽然他再查询时会提高效率&#xff0c;但是保存索引和维护索引也需要一定的空间和时间成本的。 不创建索引&#xff1a…...

前后端分离vue+nodejs+mysql高校学生社团管理系统xgp16

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对高校社团的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想&a…...

HCIA-Datacom实验指导手册:7 构建简单 IPv6 网络

HCIA-Datacom实验指导手册&#xff1a;7 构建简单 IPv6 网络 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;步骤 1 设备基础配置设备命名 步骤 2 配置设备及接口 IPv6 功能步骤 3 配置接口的 link-local 地址&#xff0c…...

ElasticSearch搜索引擎使用指南

一、ES数据基础类型 1、数据类型 字符串 主要包括: text和keyword两种类型&#xff0c;keyword代表精确值不会参与分词&#xff0c;text类型的字符串会参与分词处理 数值 包括: long, integer, short, byte, double, float 布尔值 boolean 时间 date 数组 数组类型不…...

mysql与oracle的区别

一、并发性并发性是oltp数据库最重要的特性&#xff0c;但并发涉及到资源的获取、共享与锁定。mysql:mysql以表级锁为主&#xff0c;对资源锁定的粒度很大&#xff0c;如果一个session对一个表加锁时间过长&#xff0c;会让其他session无法更新此表中的数据。虽然InnoDB引擎的表…...

JVM相关面试题及常用命令参数

JVM常用命令和参数 常用命令&#xff1a; jps&#xff1a;查看进程及其相关信息 jmap&#xff1a;用来生成dump文件和查看堆相关的各类信息的命令 jstat&#xff1a;查看jvm运行时的状态信息 jstack&#xff1a;查看jvm线程快照的命令 jinfo&#xff1a;查看jvm参数和动态修改…...

Material UI 5 学习01-按钮组件

Material UI 5 学习01-按钮组件 一、安装Material UI二、 组件1、Button组件1、基础按钮2、variant属性3、禁用按钮4、可跳转的按钮5、disableElevation属性6、按钮的点击事件onClick 2、Button按钮的颜色和尺寸1、Button按钮的颜色2、按钮自定义颜色3、Button按钮的尺寸 3、图…...

解决移除数字问题的两种方法:暴力法和使用栈

题目 给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字 示例 1 &#xff1a; 输入&#xff1a;num "1432219", k 3 输出&#xff1a;"1219"…...

高校宣讲会管理系统|基于Springboot的高校宣讲会管理系统设计与实现(源码+数据库+文档)

高校宣讲会管理系统目录 目录 基于Springboot的高校宣讲会管理系统设计与实现 一、前言 二、系统功能设计 1、学生信息管理 2、企业信息管理 3、宣讲会管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...

6_怎么看原理图之协议类接口之LCD笔记

首先想一想再前几篇文章讲的协议类的前提 1、双方约定好通信的协议 2、双方满足一定的时序要求 以上第二点又有一些要求&#xff1a; 1&#xff09;弄清2440在这个通信协议中&#xff0c;能设置哪些时序的值&#xff0c;这些值的含义是什么——2440手册 2&#xff09;弄清楚这…...

SpringCloud Alibaba 学习

一&#xff1a;SpringCloud Alibaba介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服 务的必需组件&#xff0c;方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba&…...

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 4

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 4 文章目录 前言一、创建controller相关二、测试运行测试forward_position_controller总结前言 本篇文章在上篇文章的基础上主要讲解双轴机器人驱动怎么编写机器人外部/内部(扭矩、压力)传感器数据反馈1,…...

Leetcode 3071. Minimum Operations to Write the Letter Y on a Grid

Leetcode 3071. Minimum Operations to Write the Letter Y on a Grid 1. 解题思路2. 代码实现 题目链接&#xff1a;3071. Minimum Operations to Write the Letter Y on a Grid 1. 解题思路 这一题思路上也是比较直接的&#xff0c;就是首先找到这个Y字符&#xff0c;然后…...

随想录算法训练营第五十一天|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 public class Solution {public int MaxProfit(int[] prices) {if(prices.Length<2){return 0;}int [,]dpnew int[prices.Length,4];dp[0,0]-prices[0];for(int i1;i<prices.Length;i){dp[i,0]Math.Max(dp[i-1,0],Math.Max(dp[i-1,3]-pric…...

【语言学习】std::transform函数

阅读llvm的这个提交时&#xff0c;发现了其中使用了一个函数std::transform&#xff08;原文对其进行了一层封装&#xff09; 如果不理解std::transform的三个参数的关系&#xff0c;就会对第三个参数的lambda表达式理解不了。其实&#xff0c;第三个参数的作用是提供给了一种…...

Java开发面试准备,轻松搞定SpringBoot数据校验

程序员&#xff1a;给多少工资&#xff0c;干多少事 我们不是经常会看到一个关于西游记的“悖论”吗&#xff1a; 为什么孙悟空初期大闹天宫的时候那么厉害&#xff1f;因为他自己当老板&#xff0c;打一群天庭的打工仔。 为什么取经路上又变得不行了&#xff1f;作为一个打工…...

信呼OA普通用户权限getshell方法

0x01 前言 信呼OA是一款开源的OA系统&#xff0c;面向社会免费提供学习研究使用&#xff0c;采用PHP语言编写&#xff0c;搭建简单方便&#xff0c;在中小企业中具有较大的客户使用量。从公开的资产治理平台中匹配到目前互联中有超过1W的客户使用案例。 信呼OA目前最新的版本是…...

MySQL进阶之(四)InnoDB数据存储结构之行格式

四、InnoDB数据存储结构之行格式 4.1 行格式的语法4.2 COMPACT 行格式4.2.1 记录的额外信息01、变长字段长度列表02、NULL 值列表03、记录头信息 4.2.2 记录的真实数据 4.3 Dynamic 和 Compressed 行格式4.3.1 字段的长度限制4.3.2 行溢出4.3.3 Dynamic 和 Compressed 行格式 4…...

【Qt学习笔记】(四)Qt窗口

Qt窗口 1 菜单栏1.1 创建菜单栏1.2 在菜单栏中添加菜单1.3 创建菜单项1.4 在菜单项之间添加分割线1.5 给菜单项添加槽函数1.6 给菜单项添加快捷键 2 工具栏2.1 创建工具栏2.2 设置停靠位置2.3 设置浮动属性2.4 设置移动属性2.5 添加 Action 3 状态栏3.1 状态栏的创建3.2 在状态…...