Java学习笔记7.2.2 事件处理 - Swing常用事件

news2024/11/13 23:43:11

文章目录

  • 零、本讲学习目标
  • 一、Swing常用事件
  • 二、窗体事件
    • (一)窗体事件概述
    • (二)窗体事件类API概述
    • (三)窗体事件使用方法
    • (四)窗体事件案例演示
  • 三、鼠标事件
    • (一)鼠标事件概述
    • (二)鼠标事件类API文档
    • (三)鼠标事件使用方法
    • (四)鼠标事件案例演示
      • 如何区分用户单击了鼠标左键、右键还是滚轮
  • 四、按键事件
    • (一)按键事件概述
    • (二)按键事件类API文档
    • (三)按键事件使用方法
    • (四)按键事件案例演示
  • 五、动作事件
    • (一)动作事件概述
    • (二)动作事件类API文档
    • (三)动作事件使用方法
    • (四)登录窗口事件处理

零、本讲学习目标

  1. 了解Swing常用事件
  2. 掌握窗体事件处理方法
  3. 掌握鼠标事件处理方法
  4. 掌握按键事件处理方法
  5. 掌握动作事件处理方法

一、Swing常用事件

  • Swing常用事件包含窗体事件、鼠标事件、按键事件和动作事件
    在这里插入图片描述

二、窗体事件

(一)窗体事件概述

  • 对窗体进行操作时,例如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件。Java中提供了一个WindowEvent类用于表示窗体事件。

(二)窗体事件类API概述

  • https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/WindowEvent.html
    在这里插入图片描述

(三)窗体事件使用方法

  • 首先需要定义一个实现了WindowListener接口的类作为窗体监听器,然后通过addWindowListener()方法将窗体对象与窗体监听器进行绑定。
  • 窗口监听器提供了七个抽象方法
    在这里插入图片描述

(四)窗体事件案例演示

  • c07.s02.p02包里创建WindowEventDemo
    在这里插入图片描述
package c07.s02.p02;

import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

/**
 * 功能:窗口事件演示
 * 作者:华卫
 * 日期:2022年12月11日
 */
public class WindowEventDemo extends JFrame {
    public static void main(String[] args) {
        // 创建窗口对象
        JFrame frame = new JFrame("窗体事件演示");

        // 设置窗口属性
        frame.setSize(400, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 给窗口注册监听器
        frame.addWindowListener(new WindowListener() {
            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("windowOpened--窗体打开事件");
            }

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("windowClosing--窗体正在关闭事件");
            }

            @Override
            public void windowClosed(WindowEvent e) {
                System.out.println("windowClosed--窗体已关闭事件");
            }

            @Override
            public void windowIconified(WindowEvent e) {
                System.out.println("windowIconified--窗体图标化事件");
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                System.out.println("windowDeiconified--窗体取消图标化事件");
            }

            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("windowActivated--窗体激活事件");
            }

            @Override
            public void windowDeactivated(WindowEvent e) {
                System.out.println("windowDeactivated--窗体停用事件");
            }
        });
    }
}
  • 运行程序,查看结果
    在这里插入图片描述
  • 大家看看七个窗口事件触发顺序
    在这里插入图片描述

三、鼠标事件

(一)鼠标事件概述

  • 用户会经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,其中包括鼠标按下、鼠标松开、鼠标单击等。Java中提供了一个MouseEvent类用于表示鼠标事件。几乎所有的组件都可以产生鼠标事件。

(二)鼠标事件类API文档

  • https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/MouseEvent.html
    在这里插入图片描述

(三)鼠标事件使用方法

  • 首先需要通过实现MouseListener接口定义监听器(也可以通过继承适配器MouseAdapter类来实现),然后调用addMouseListener()方法将监听器绑定到事件源对象。
  • 鼠标监听器提供了五个抽象方法
    在这里插入图片描述

(四)鼠标事件案例演示

  • c07.s02.p02包里创建MouseEventDemo
    在这里插入图片描述
package c07.s02.p02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

/**
 * 功能:鼠标事件演示
 * 作者:华卫
 * 日期:2022年12月11日
 */
public class MouseEventDemo {
    public static void main(String[] args) {
        // 创建窗口对象
        JFrame frame = new JFrame("鼠标事件演示");
        // 设置窗口边界
        frame.setBounds(200, 200, 300, 200);
        // 设置屏幕居中(采用相对定位方式)
        frame.setLocationRelativeTo(null);
        // 设置窗口布局
        frame.setLayout(new FlowLayout());

        // 创建按钮对象
        JButton btnTest = new JButton("测试按钮");
        // 将按钮添加到窗口
        frame.add(btnTest);

        // 设置窗口可见
        frame.setVisible(true);
        // 设置默认关闭方式(关闭窗口就退出应用程序)
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 给按钮注册鼠标监听器
        btnTest.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("mouseClicked--鼠标完成单击事件");
            }

            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("mousePressed--鼠标按下事件");
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("mouseReleased--鼠标放开事件");
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("mouseEntered--鼠标进入按钮区域事件");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                System.out.println("mouseExited--鼠标移出按钮区域事件");
            }
        });
    }
}
  • 运行程序,查看结果
    在这里插入图片描述
  • 大家看看鼠标事件触发的先后次序
    在这里插入图片描述

如何区分用户单击了鼠标左键、右键还是滚轮

常量作用
MouseEvent.BUTTON1左键常量,用来判定鼠标左击事件
MouseEvent.BUTTON2滚轮常量,用来判定鼠标滚轮点击事件
MouseEvent.BUTTON3右键常量,用来判定鼠标右击事件
  • 修改mouseClicked(MouseEvent e)方法
    在这里插入图片描述
@Override                                                           
public void mouseClicked(MouseEvent e) {                            
    switch (e.getButton()) {                                        
        case MouseEvent.BUTTON1:                                    
            System.out.println("mouseClicked--鼠标左击事件");             
            break;                                                  
        case MouseEvent.BUTTON2:                                    
            System.out.println("mouseClicked--鼠标中键单击事件");           
            break;                                                  
        case MouseEvent.BUTTON3:                                    
            System.out.println("mouseClicked--鼠标右击事件");             
            break;                                                  
    }                                                               
}                                                                   
  • 运行程序,查看结果
    在这里插入图片描述
  • 注意鼠标左击、中键单击和右击事件
    在这里插入图片描述

四、按键事件

(一)按键事件概述

  • 按键操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为按键事件。Java中提供了一个KeyEvent类表示按键事件。

(二)按键事件类API文档

  • https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/KeyEvent.html
    在这里插入图片描述

(三)按键事件使用方法

  • 处理按键事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类;然后调用addKeyListener()方法将监听器绑定到事件源对象。
  • 按键监听器提供了三个抽象方法
    在这里插入图片描述

(四)按键事件案例演示

  • c07.s02.p02包里创建KeyEventDemo
    在这里插入图片描述
package c07.s02.p02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 * 功能:按键事件演示
 * 作者:华卫
 * 日期:2022年12月11日
 */
public class KeyEventDemo {
    public static void main(String[] args) {
        // 创建窗口对象
        JFrame frame = new JFrame("按键事件演示");
        // 设置窗口边界
        frame.setBounds(200, 200, 300, 200);
        // 设置屏幕居中(采用相对定位方式)
        frame.setLocationRelativeTo(null);
        // 设置窗口布局
        frame.setLayout(new FlowLayout());

        // 创建文本框对象
        JTextField txtTest = new JTextField(15);
        // 将文本框添加到窗口
        frame.add(txtTest);

        // 设置窗口可见
        frame.setVisible(true);
        // 设置默认关闭方式(关闭窗口就退出应用程序)
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 给文本框注册按键监听器
        txtTest.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
                // 获取按键字符
                char keyChar = e.getKeyChar();
                // 获取按键字符的键码
                int keyCode = e.getKeyCode();
                System.out.println("按键字符:" + keyChar + "\t按键代码:" + keyCode);
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }
        });
    }
}
  • 运行程序,查看结果
    在这里插入图片描述

  • 依次按了插入键、Shift键、Shift键、f、a、g、l、9、k键
    在这里插入图片描述

  • 说明:虽然输入的是小写字母“a”,但是键码确实对应的大写字母“A”的ASCII码“65”。

五、动作事件

(一)动作事件概述

  • 动作事件与前面三种事件有所不同,它不代表某类事件,只是表示一个动作发生了。例如,在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。在Java中,动作事件用ActionEvent类表示。

(二)动作事件类API文档

  • https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/event/ActionEvent.html
    在这里插入图片描述

(三)动作事件使用方法

  • 处理动作事件的监听器对象需要实现ActionListener接口,然后调用addActionListener()方法将监听器绑定到事件源对象。

(四)登录窗口事件处理

  • c07.s02.p01包里的LoginFrame拷贝到c07.s02.p02包,更名为ActionEventDemo
    在这里插入图片描述
package c07.s02.p02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 功能:登录窗口 - 动作事件演示
 * 作者:华卫
 * 日期:2022年12月11日
 */
public class ActionEventDemo extends JFrame {
    /**
     * 构造方法
     *
     * @param title
     * @throws HeadlessException
     */
    public ActionEventDemo(String title) throws HeadlessException {
        super(title); // 调用父类构造方法传入标题参数
        initGUI(); // 调用初始化图形用户界面方法
    }

    /**
     * 初始化图形用户界面方法
     */
    private void initGUI() {
        // 创建三个面板
        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        JPanel panel3 = new JPanel();
        // 获取内容面板
        JPanel panel = (JPanel) getContentPane();
        // 设置面板panel的布局为表格布局
        panel.setLayout(new GridLayout(3,1));
        // 将三个小面板添加到面板panel里
        panel.add(panel1);
        panel.add(panel2);
        panel.add(panel3);

        /* 第一个面板里要添加用户名标签与文本框 */
        // 创建用户名标签
        JLabel lblUsername = new JLabel("用户名:");
        // 创建用户名文本框
        JTextField txtUsername = new JTextField(15);
        // 将标签与文本框添加到第一个面板
        panel1.add(lblUsername);
        panel1.add(txtUsername);

        /* 第二个面板里要添加密码标签与文本框 */
        // 创建密码标签
        JLabel lblPassword = new JLabel("密    码:");
        // 创建密码文本框
        JPasswordField txtPassword = new JPasswordField(15);
        // 将标签与文本框添加到第二个面板
        panel2.add(lblPassword);
        panel2.add(txtPassword);

        /* 第三个面板里要添加两个按钮 */
        // 创建登录按钮
        JButton btnLogin = new JButton("登录");
        // 创建取消按钮
        JButton btnCancel = new JButton("取消");
        // 将两个按钮添加到第三个面板
        panel3.add(btnLogin);
        panel3.add(btnCancel);

        // 设置窗口边界
        setBounds(200, 200, 300, 200);
        // 设置屏幕居中
        setLocationRelativeTo(null);
        // 设置窗口紧凑
        pack();
        // 设置窗口可见
        setVisible(true);
        // 设置默认关闭方式
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 给【取消】按钮注册动作监听器
        btnCancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 退出应用程序
                System.exit(0);
            }
        });

        // 给【登录】按钮注册动作监听器
        btnLogin.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取用户输入的用户名与密码
                String username = txtUsername.getText().toString();
                String password = new String(txtPassword.getPassword());
                // 判断用户输入的用户名与密码是否正确(假定用户名和密码都是admin)
                if (username.equals("admin")) {
                    if (password.equals("admin")) {
                        JOptionPane.showMessageDialog(ActionEventDemo.this,
                                "欢迎登录系统!", "提示信息", JOptionPane.INFORMATION_MESSAGE);
                        ActionEventDemo.this.dispose(); // 关闭登录窗口
                    } else {
                        JOptionPane.showMessageDialog(ActionEventDemo.this,
                                "密码有错误!", "提示信息", JOptionPane.ERROR_MESSAGE);
                        txtPassword.requestFocus(); // 让密码文本框获取焦点
                        txtPassword.selectAll(); // 选中密码全部文本
                    }
                } else {
                    JOptionPane.showMessageDialog(ActionEventDemo.this,
                            "用户名有错误!", "提示信息", JOptionPane.ERROR_MESSAGE);
                    txtUsername.requestFocus(); // 让用户名文本框获取焦点
                    txtUsername.selectAll(); // 选中用户名全部文本
                }
            }
        });
    }

    /**
     * 主方法
     *
     * @param args
     */
    public static void main(String[] args) {
        // 实例化登录窗口对象
        ActionEventDemo loginFrame = new ActionEventDemo("登录窗口");
        JDialog dialog;
    }
}
  • 运行程序,查看结果
    在这里插入图片描述

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

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

相关文章

【进阶】C语言第一课:深度剖析数据在内存中的存储

目录 前言: 一、数据类型详细介绍: 1.相关知识回顾: 2.类型的基本归类: 整型家族: 浮点型家族: 构造类型: 指针类型: 空类型: 二、整形在内存中的存储: …

PS 更换证件照背景色

哈喽,各位小伙伴!今天我们来学习一下如何更换证件照背景色? 常见证件照 常见的证件照一般有白色、蓝色和红色三种样式,我们拍证件照一般只拍一种,为了节省支出,其他两种颜色就需要我们自己调色处理了 蓝…

计算机毕业设计ssm+vue基本微信小程序的客户资源管理系统

项目介绍 基于Vue技术的客户资源管理系统是对客户的一些资料进行有效的管理, 它将企业的经营管理以客户为中心,通过系统管理员就可以轻松有效的对客户的信息进行操作管理。从而实现客户资料的一致性、准确性,查询的及时性等等。 该系统提供了客户管理、系统管理、合同管理、…

Java学习笔记7.1.2 初探Swing世界 - 布局管理器

文章目录零、本讲学习目标一、布局管理器二、边框布局管理器(BorderLayout)(一)边框布局管理器概述(二)边框布局管理器API文档(三)边框布局管理器使用方法(四&#xff09…

Java项目:SSM在线物流综合管理平台系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台,后台为管理员登录; 管理员角色包含以下功能 管理员登录,管理员管理,合作公司管理,车型信息,货物基本…

MongoDB 数据库安装详细教程

1. MongoDB 下载流程 (急用)直接抵达:Download MongoDB Community Server | MongoDB 打开MongoDB官网:MongoDB (点击进入) 下载完成之后双击打开会出现如下界面: 2. MongoDB 环境配置 通过刚刚的安装知道了MongoDB Se…

人工智能--决策树原理与代码实现、特征提取、回归决策树

决策树:本质就是一个拥有多个判断节点的树 1,熵 系统越有序,集中,熵值越低;系统越混乱,越分散,熵值越高 在这里的计算中,log2记为1,通常以2为底 2,决策树…

Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

SpringBoot中使用Easyexcel实现Excel导入导出功能(三)

导出的数据包含有图片 导出excel表格的数据包含有图片,这种场景比较少。通Easyexcel实现这样的需求,我认为最简便的方法就是使用前面提到的自定义转换器(com.alibaba.excel.converters.Converter);假如有这样一个场景&…

mysql学习-- 聚合函数,group by理解与使用

文章目录聚合函数定义常用的聚合函数group by的使用使用单个列进行分组根据多个列进行分组having 的使用作用要求sql 语法sql92语法:sql99语法:sql语句的执行过程(进理解为主):聚合函数 定义 作用一组数据&#xff0…

ArcGIS Pro为CAD设置投影

将CAD加载到GIS中,经常出现与GIS数据不能重合的问题。 现在的国空规划的数据基本都是CGCS2000,不重叠的原因不太可能是因为地理坐标系不统一,那极有可能就是ArcGIS的动态投影与CAD的带号没有统一。 如下图,左边为ArcGIS动态投影…

宠物之家网站大学生网页制作教程 学生HTML静态宠物网页设计作业成品 DIV布局简单动物网页制作代码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

宝塔无法安装fileinfo扩展解决办法(小白篇)

宝塔无法安装fileinfo扩展解决办法(小白篇) 宝塔无法php安装fileinfo扩展的方法:手动安装 重装系统登录宝塔先不要安装其他软件,先设置swap是Linux下的虚拟内存,设置内存后先安装PHP版本,安装好PHP以后&…

Python实现数据结构与算法(三)链表

链表 为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 链表的定义 链表&#xf…

html内联框架iframe

<!--iframe内联框架src&#xff1a;地址w-h&#xff1a;宽度高度 --> <iframe src"https://www.4399.com" frameborder"0" width"800px" height"800px"></iframe> 使用name属性&#xff1a; <!--回顾&#xff1…

Allegro如何创建差分对操作指导

Allegro如何创建差分对操作指导 Allegro可以在规则管理器里面进行差分对的创建,让两个网络以差分的形式布线,具体操作如下 打开规则管理器 选择Physical-net-All layers 选择两个需要创建差分对的网络,选择Create-Differential Pair 输入差分对的名字 选择Create 差分…

【MATLAB教程案例58】使用matlab实现yolov2网络目标检测功能与仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.yolo网络理论概述

Python画3D足球2

文章目录前情提要补点球形膨胀前情提要 足球是正五边形和正六边形拼接而成&#xff0c;由此形成的骨架结构&#xff0c;可通过切割正二十面体获得&#xff0c;所以画足球的第一步是画正二十面体&#xff1a;Python绘制正二十面体 在学会绘制正二十面体之后&#xff0c;就可以…

【JavaWeb开发-Servlet】老人言随机语录

需求&#xff1a;点击网页按钮随机显示一句话&#xff1a; 1、内容涵盖&#xff1a; 老人言、励志语录、名言名言、一句情话 2、设计要求&#xff1a; 以老人言为例&#xff1a;①在数据库创建一张表&#xff0c;存放老人言经典语录。字段包括&#xff1a;id、sentence。id为in…

腾讯云特惠专区——永久有效

腾讯云—腾讯倾力打造的云计算品牌,以卓越科技能力助力各行各业数字化转型,为全球客户提供领先的云计算、大数据、人工智能服务,以及定制化行业解决方案和提供可靠企业上云服务。 购买腾讯云的优势是新用户特别便宜;国内访问速度快;个人认证可秒过;缺点是:网站内容或者…