当前位置: 首页 > 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图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...

vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能

vxe-table vue 表格复选框多选数据&#xff0c;实现快捷键 Shift 批量选择功能 查看官网&#xff1a;https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...