JAVA中关于图形化界面的学习(GUI)动作监听,鼠标监听,键盘监听

动作监听: 

先创建一个图形化界面,接着创建一个按钮对象,设置按钮的大小。

添加一个addActionListener();

addActionListener() 方法定义在 java.awt.event.ActionListener 接口相关的上下文中,许多支持用户交互产生动作事件的组件类(如 JButtonJMenuItem 等)都实现了该方法。通过调用这个方法,可以将一个实现了 ActionListener 接口的对象注册到组件上,当组件上发生特定动作(通常是点击操作)时,会触发相应的动作事件,进而调用监听器中的处理方法。

import javax.swing.*;public class Test3 {public static void main(String[] args){JFrame jFrame=new JFrame();jFrame.setSize(603,680);jFrame.setTitle("演示");jFrame.setAlwaysOnTop(true);jFrame.setLocationRelativeTo(null);jFrame.setDefaultCloseOperation(3);jFrame.setLayout(null);//创建一个按钮对象JButton jtb=new JButton();jtb.setBounds(0,0,100,50);//jtb:组件对象,表示你要给哪个组件添加事件//addActionListener:表示我要给组件添加哪个事件监听jtb.addActionListener(new  MyJFrame2());//把按钮添加到界面当中jFrame.getContentPane().add(jtb);jFrame.setVisible(true);}
}

但是,这个new MyJFrame2()只被用了一次,所以可以使用匿名内部类,在 GUI 编程中,为组件添加事件监听器时,经常使用匿名内部类来实现事件监听器接口。在 Java 中,匿名内部类是一种特殊的局部内部类,它没有显式的类名。使用匿名内部类可以在需要创建一个实现某个接口或继承某个类的对象时,无需显式定义一个新的类,从而使代码更加简洁。

 jtb.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("别点");}

第二种方式: 

我们先声明并初始化两个JButton类,他们两个要是成员变量,这样整段代码都能使用它,接着创建成员构造方法。创建一个窗口,并创造两个按钮对象。按钮对象可以直接调用this(这里的this为了实现下面actionPerformed方法)

  • Object source = e.getSource():获取触发动作事件的组件对象。
  • if (source == jtb1):判断触发事件的组件是否为 jtb1,如果是,则将 jtb1 按钮的大小设置为 200x200 像素。
  • else if (source == jtb2):若触发事件的组件是 jtb2,则使用 Random 类生成两个 0 到 199 之间的随机整数,作为 jtb2 按钮的新宽度和高度。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;public class Test3 extends JFrame implements ActionListener {JButton jtb1=new JButton("点");JButton jtb2=new JButton("点");public Test3(){this.setSize(603,680);this.setTitle("演示");this.setAlwaysOnTop(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(3);this.setLayout(null);//创建一个按钮对象jtb1.setBounds(0,0,100,50);jtb1.addActionListener(this);jtb2.setBounds(0,0,100,50);jtb2.addActionListener(this);//jtb:组件对象,表示你要给哪个组件添加事件//addActionListener:表示我要给组件添加哪个事件监听//把按钮添加到界面当中this.getContentPane().add(jtb1);this.getContentPane().add(jtb2);this.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {Object source = e.getSource();if(source==jtb1){jtb1.setSize(200,200);} else if (source==jtb2) {Random random=new Random();jtb2.setSize(random.nextInt(200),random.nextInt(200));}}
}

鼠标监听:

一个鼠标点击一个按钮之后,可以分为:划入动作,按下动作,松开动作,划出动作。

给按钮绑定鼠标事件:

一个简单的鼠标监听机制,当你的鼠标做相应动作的时候,程序会打印相应的动作。

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;public class Test3 extends JFrame implements MouseListener {JButton jtb1=new JButton("点");public Test3(){this.setSize(603,680);this.setTitle("演示");this.setAlwaysOnTop(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(3);this.setLayout(null);jtb1.setBounds(0,0,100,50);jtb1.addMouseListener(this);//把按钮添加到界面当中this.getContentPane().add(jtb1);this.setVisible(true);}@Overridepublic void mouseClicked(MouseEvent e) {System.out.println("单击");}@Overridepublic void mousePressed(MouseEvent e) {System.out.println("按住不松");}@Overridepublic void mouseReleased(MouseEvent e) {System.out.println("送开");}@Overridepublic void mouseEntered(MouseEvent e) {System.out.println("划入");}@Overridepublic void mouseExited(MouseEvent e) {System.out.println("划出");}
}

键盘监听机制:

跟前面两个监听方法类似

@Overridepublic void keyTyped(KeyEvent e) {// 当用户按下并释放一个键,产生一个字符时调用char keyChar = e.getKeyChar();label.setText("你输入的字符是: " + keyChar);}@Overridepublic void keyPressed(KeyEvent e) {// 当用户按下某个键时调用int keyCode = e.getKeyCode();label.setText("你按下的键码是: " + keyCode);}@Overridepublic void keyReleased(KeyEvent e) {// 当用户释放某个键时调用int keyCode = e.getKeyCode();label.setText("你释放的键码是: " + keyCode);}public static void main(String[] args) {// 在事件调度线程中创建和显示 GUIjavax.swing.SwingUtilities.invokeLater(() -> new KeyboardListenerExample());}
}

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

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

相关文章

MySQL 基础学习文档

一、MySQL 概述 1.1 核心概念 数据库 (DB):存储数据的结构化仓库数据库管理系统 (DBMS):操作数据库的软件(如 MySQL、Oracle)SQL:操作关系型数据库的标准语言 1.2 安装与配置 下载地址:MySQL Installer…

火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试

前言 在大模型的使用过程当中,Prompt的使用非常的关键。原来,我对Prompt的理解不深,觉得Prompt的产生并不是很有必要。但是,自从使用了火山方舟中的“Prompt优解”之后,感受加深了,觉得Prompt是我们和大模型…

SpringBoot入门-(2) Spring IOC机制【附实例代码】

SpringBoot入门-(2) Spring IOC机制 Spring Spring是一个当前主流的轻量级的框架,发展到形状已经不仅仅是一个框架,而是形成以Spring为基础的生态圈,如(Spring Boot,Spring Cloud,Spring Security等) Spring 两大核心技术 控制反转(IoC)面…

备赛蓝桥杯之第十六届模拟赛3期职业院校组

提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

【AI大模型】提示词(Prompt)工程完全指南:从理论到产业级实践

【AI大模型】提示词(Prompt)工程完全指南:从理论到产业级实践 一、Prompt 提示词介绍:AI的“密码本” 1. Prompt的底层定义与价值 本质:Prompt是人与AI模型的“协议语言”,通过文本指令激活模型的特定推理…

Excel 小黑第12套

对应大猫13 涉及金额修改 -数字组 -修改会计专用 VLOOKUP函数使用(查找目标,查找范围(F4 绝对引用),返回值的所在列数,精确查找或模糊查找)双击填充柄就会显示所有值 这个逗号要中文的不能英…

基于Spring Boot的冷链物流系统的设计与实现的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

python环境集成整理

接口测试过程中,可能会切换测试环境,通过配置相关信息修改 设计思路: 1、 准备各个环境配置文件信息,包括http、common 、redis、db 2、创建不同环境配置信息 测试环境:env_test.yml、 预生产环境:env_prepro.yml、生产…

动平衡仿真程序设计

以下是针对动平衡振动信号分析的模块扩展方案&#xff0c;基于原有信号发生器架构进行增强&#xff1a; 一、动平衡专用信号生成器 // UnbalanceVibrationGenerator.h #pragma once #include "SignalGenerator.h" #include <vector>class UnbalanceVibration…

牛客周赛85 题解 Java ABCDEFG

A小紫的均势博弈 判断输入的 n 是奇数还是偶数 import java.io.*; import java.math.*; import java.util.*;public class Main {static IoScanner sc new IoScanner();static final int mod(int) (1e97);static void solve() throws IOException {int nsc.nextInt();if(n%2…

python——UI自动化(1) selenium之介绍和环境配置

一、selenium介绍 selenium是一个第三方库&#xff0c;python有很多库&#xff1b; 1、什么是ui自动化? 通过模拟手工操作用户ui页面的方式&#xff0c;用代码去实现自动化操作和验证的行为。 2、ui自动化的优点&#xff1f; &#xff08;1&#xff09;解决重复性的功能测…

Can通信流程

下面给出一个更详细的 CAN 发送报文的程序流程说明&#xff0c;结合 HAL 库的使用及代码示例&#xff0c;帮助你了解每一步的具体操作和内部原理。 一、系统与外设初始化 1.1 HAL 库初始化 在 main() 函数开头&#xff0c;首先调用 HAL 库初始化函数&#xff1a; HAL_Init()…

15 数据结构及算法应用

15 数据结构及算法应用 15.1 算法策略区分 15.1.1、分治法 特征:把一个问题拆分成多个小规模的相同子问题&#xff0c;一般可用递归解决。 经典问题:斐波那契数列、归并排序、快速排序、矩阵乘法、二分搜索、大整数乘法、汉诺塔。 15.1.2、贪心法 (一般用于求满意解) …

基于大模型的唇裂手术全流程预测与应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目标与内容 二、唇裂相关医学知识概述 2.1 唇裂的定义、分类与发病原因 2.2 唇裂对患者生理与心理的影响 2.3 传统唇裂治疗方法与局限性 三、大模型技术原理与应用基础 3.1 大模型概述 3.2 适用于唇裂预测的大模型类型及特…

环境变量设置异常导致UOS文件管理器无法正常运行

编译QT5.15.2&#xff0c;与UOS20.9的QT依赖冲突 现象原因解决方法 现象 重启系统后UOS桌面变成黑色&#xff0c;没有任何图标&#xff0c;任务栏的应用本来是有预览的&#xff0c;但也变得不可用。 原因 找了很久&#xff0c;查到原来是dde-file-manager未能正常启动。直接…

《认知觉醒》改变的核心方法论

《认知觉醒》改变的核心方法论 一、认知觉醒的核心目标 改变 → 提升能力 → 获得更好生活 二、大脑运作机制 脑区运算速度作用特点本能脑1.1亿次/秒自动化反应&#xff0c;能量消耗低情绪脑1.1亿次/秒情感驱动型决策​理智脑​40次/秒战略指挥官角色 关键差异&#xff1a…

Python中的字典:深度解析与应用实践

一、字典的本质与特性 Python字典&#xff08;Dictionary&#xff09;是以**键值对&#xff08;Key-Value Pair&#xff09;**形式存储数据的无序集合&#xff0c;使用大括号{}定义。其核心特性包括&#xff1a; 快速查找&#xff1a;基于哈希表实现&#xff0c;通过键&#…

【蓝桥杯python研究生组备赛】005 数学与简单DP

题目1 01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&a…

2024年国赛高教杯数学建模E题交通流量管控解题全过程文档及程序

2024年国赛高教杯数学建模 E题 交通流量管控解题 原题再现 随着城市化进程的加快、机动车的快速普及&#xff0c;以及人们活动范围的不断扩大&#xff0c;城市道路交通拥堵问题日渐严重&#xff0c;即使在一些非中心城市&#xff0c;道路交通拥堵问题也成为影响地方经济发展和…

穿越是时空之门(java)

emm&#xff0c;之前做过一道类似的题目&#xff0c;但是这次又忘了 一开始的错误代码 package Lanqiao;import javax.swing.plaf.synth.SynthTextAreaUI; import java.math.BigInteger;/*** author zb* date2025/3/19 21:33*/ public class L19701 {public static void main…