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

ops/2025/3/19 17:37:24/

动作监听: 

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

添加一个addActionListener();

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

java">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 中,匿名内部类是一种特殊的局部内部类,它没有显式的类名。使用匿名内部类可以在需要创建一个实现某个接口或继承某个类的对象时,无需显式定义一个新的类,从而使代码更加简洁。

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 按钮的新宽度和高度。
java">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));}}
}

鼠标监听:

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

给按钮绑定鼠标事件:

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

java">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("划出");}
}

键盘监听机制:

跟前面两个监听方法类似

java">@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.ppmy.cn/ops/167071.html

相关文章

【动态规划】--- 路径问题

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 🏠 不同路径 📌 题目解析 62. 不同路径 - 力扣(LeetCode) 📌 算法原理 解法一 …

基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现

基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…

【R语言】pmax和pmin函数的用法详解

pmax和pmin函数的用法 以pmax为例,这个函数的返回值是一个向量而不是一个数值,这也是他跟max函数的最大区别,记住一个口诀: pmax是设置下限的,pmin是设置上限的,两个函数组合使用可以同时设置上限和下限&…

华为供应链的变革模式和方法P105(105页PPT)(文末有下载方式)

资料解读:华为供应链的变革模式和方法 详细资料请看本解读文章的最后内容。 华为作为全球领先的通信技术公司,其供应链管理一直是业界关注的焦点。本文将从华为供应链的变革历程、理论基础、转型要素、流程再造、模式升级以及未来展望等多个维度&#…

ETL中的实用功能以及数据集成方式

在企业数字化转型的进程中,数据集成扮演着至关重要的角色。它不仅是实现信息流动和系统协同的关键步骤,更是提升企业运营效率和决策能力的核心驱动力。ETL(Extract,Transform,Load)作为数据集成的重要工具&…

程序化广告行业(26/89):深入了解广告投放计划与供应商入库流程

程序化广告行业(26/89):深入了解广告投放计划与供应商入库流程 大家好!一直以来,我都希望能和大家在技术领域共同探索、共同进步。随着互联网的发展,程序化广告在营销领域占据着越来越重要的地位。今天&am…

联邦学习(Federated Learning)

1. 概念 联邦学习(Federated Learning, FL)是一种分布式机器学习技术,它允许多个参与方(如设备、机构或企业)在不共享原始数据的情况下协同训练机器学习模型。联邦学习通过本地计算模型参数聚合的方式,保护…

java学习总结(六)Spring IOC

一、Spring框架介绍 Spring优点: 1、方便解耦,简化开发,IOC控制反转 Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护交给Spring 2、AOP 编程的支持 Spring 提供面向切编程,可以方便的实现对序进行权限拦截、运监控等…