Java程序设计——Swing UI 事件处理(五)

这篇具有很好参考价值的文章主要介绍了Java程序设计——Swing UI 事件处理(五)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 事件处理

5.1.事件处理机制

5.2.事件处理的模型

 5.3.常见事件及事件监视器

5.4.事件处理方法

5.5.事件处理:

5.5.1.ActionEvent 与 ActionListener

5.5.2.ItemEvent 与 ItemListener

5.5.3.KeyEvent 与 KeyListener

5.5.4.MouseEvent 与 MouseListener/MouseMotionListener

5.5.5.ListSelectionEvent与ListSelectionListener

5.5.6.ChangeEvent 与 ChangeListener

5.5.7.FocusEvent 与 FocusListener

5.5.8.事件适配器类(Adapter)

​编辑


 事件处理

5.1.事件处理机制

事件:Java语言将每一个键盘或鼠标的操作定义为一个“事件”。

Java程序设计——Swing UI 事件处理(五)

  • 当用户点击了一个按钮,意味着一个按钮事件的发生。
  • 事件处理方法对该事件进行响应
  • 事件响应:当事件发生时,程序应该作出何种响应。

5.2.事件处理的模型

事件处理的基本思路如下:

  • 一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事件;
  • 一个事件源必须注册监听器,以便监听器可以接受关于一个特定事件的通知。
  • 事件源:产生事件的组件叫事件源。
  • 事件对象:描述系统中发生了什么的对象
  • 事件监听器:对事件进行处理的类。

Java程序设计——Swing UI 事件处理(五)

  • 事件源:按钮
  • 事件对象:动作事件
  • 事件监视器:动作事件-处理程序

 5.3.常见事件及事件监视器

事件名称

监听器

主要用途

WindowEvent

WindowListener

窗口发生变化,如关闭

ActionEvent

ActionListener

产生动作,如单击按钮

ItemEvent

ItemListener

项目变化,如复选框

ListSelectionEvent

ListSelectionListener

选择列表中的项目时

ChangeEvent

ChangeListener

状态改变,如进度条

FocusEvent

FocusListener

焦点获得或失去

MouseEvent

MouseListener

鼠标点击、进入或离开

MouseEvent

MouseMotionListener

鼠标拖动或移动

KeyEvent

KeyListener

按键产生时

MenuEvent

MenuListener

菜单选择

5.4.事件处理方法

  1. 创建将要产生事件的组件对象
  2. 构造实现相应事件监听器接口的类,并创建事件监听器对象
  3. 为组件对象增加事件监听器对象:组件对象.addXxxListener(事件监听器对象);如:button.addActionListener(this);
  4. 注:接口中的方法都含有所产生的事件对象参数,使用该参数的getSource()方法可以得到产生该事件的事件源
  5.    例如:public void actionPerformed(ActionEvent e);

5.5.事件处理:

5.5.1.ActionEvent 与 ActionListener

  • 当单击按钮、在文本域中回车、选择组合框中的项目、选择菜单项时产生该事件
  • ActionListener接口中的方法:void actionPerformed(ActionEvent e);
  • ActionEvent中的常用方法:String getActionCommand();//获得与该动作相联系的组件的命令字符串名称,
  • 组件对象可使用setActionCommand(String str)方法进行设置,默认的命令字符串名称是组件的标签名称   //使用该方法可实现不同组件共用同一段处理代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MainClass{
	public static void main(String[] args){
		new ActionListener_1();
	}
}

class ActionListener_1 extends JFrame{
	private JPanel panel = new JPanel();
	private JButton btn1 = new JButton("粉色");
	private JButton btn2 = new JButton("黄色");
	private JButton btn3 = new JButton("绿色");
	public ActionListener_1(){
		super("ActionListener");
		btn1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				panel.setBackground(Color.pink);    // 设置面板背景颜色
			}
		});
		btn2.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				panel.setBackground(Color.yellow);
			}
		});
		btn3.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				panel.setBackground(Color.green);
			}
		});
		panel.add(btn1);
		panel.add(btn2);
		panel.add(btn3);
		this.add(panel);
		this.setSize(300,300);
		this.setLocation(200,250);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}

Java程序设计——Swing UI 事件处理(五)

 Java程序设计——Swing UI 事件处理(五)


5.5.2.ItemEvent 与 ItemListener

  • 当单选按钮、复选按钮、下拉列表框中的项目状态发生变化时产生该事件
  • ItemListener接口中的方法:void  itemStateChanged(ActionEvent e);
  • ItemEvent中的常用方法
    • Object getItem();//返回受该事件影响的项目对象,据需要可将Object转换为相应的类型
    • int getStateChange();//返回项目状态发生变化的类型
    • 取值:ItemEvent.SELECTED    ItemEvent.DESELECTED
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class MainClass {
    public static void main(String[] args){
        MyJFrame mf = new MyJFrame();
    }
}
class MyJFrame extends JFrame {
    private JPanel panel;
    private JButton button;
    private JRadioButton btnPink,btnOrag,btnGren;
    private ButtonGroup buttonGroup;
    public MyJFrame(){
        super("itemListener");
        button = new JButton("请为我选择一种背景颜色");
        panel = new JPanel();
        btnPink = new JRadioButton("粉色");
        btnOrag = new JRadioButton("橙色");
        btnGren = new JRadioButton("青色");
        buttonGroup = new ButtonGroup();
        btnPink.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                button.setBackground(Color.PINK);
                button.setText("你的背景色变为了粉色");
            }
        });
        btnOrag.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                button.setBackground(Color.ORANGE);
                button.setText("你的背景色变为了橙色");
            }
        });
        btnGren.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                button.setBackground(Color.cyan);
                button.setText("你的背景色变为了青色");
            }
        });
        buttonGroup.add(btnPink);
        buttonGroup.add(btnOrag);
        buttonGroup.add(btnGren);
        panel.add(btnPink);
        panel.add(btnOrag);
        panel.add(btnGren);
        this.add(button);
        this.add(panel, BorderLayout.SOUTH);
        this.setLocation(100,200);
        this.setSize(400,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

Java程序设计——Swing UI 事件处理(五)

 Java程序设计——Swing UI 事件处理(五)


5.5.3.KeyEvent 与 KeyListener

当组件上发生击键时产生该事件
KeyListener接口中的方法:

  •         void keyPressed(KeyEvent e);
  •         void keyReleased(KeyEvent e);
  •         void keyTyped(KeyEvent e);

KeyEvent中的常用方法:

  • char  getKeyChar(); //返回字符键值
  • int     getKeyCode(); //返回整数键值
  • boolean isAltDown();
  • boolean isControlDown();
  • boolean isShiftDown();

注:KeyEvent中定义了表示键的常量,如 VK_1

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

public class MainClass{
	public static void main(String[] args) {
		new KeyListener_2();
	}
}
class KeyListener_2 extends JFrame{
	private JPanel panel = new JPanel();
	private JButton button = new JButton("走动");
	public KeyListener_2(){
		super("KeyListener");
		button.addKeyListener(new KeyListener(){
			public void keyPressed(KeyEvent e) {
				int keyCode = e.getKeyCode();
				int x = button.getX();
				int y = button.getY();
				if(keyCode == KeyEvent.VK_RIGHT){
					button.setLocation(x+20,y);
				}else if(keyCode == KeyEvent.VK_LEFT){
					button.setLocation(x-20,y);
				}else if(keyCode == KeyEvent.VK_UP){
					button.setLocation(x,y-20);
				}else if(keyCode == KeyEvent.VK_DOWN){
					button.setLocation(x,y+20);
				}
			}
			public void keyReleased(KeyEvent e) {

			}
			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub	
			}
			
		});
		panel.add(button);
		add(panel);
		setLocation(300,250);
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
}

Java程序设计——Swing UI 事件处理(五)

Java程序设计——Swing UI 事件处理(五)


5.5.4.MouseEvent 与 MouseListener/MouseMotionListener

5.5.4.1MouseListener

当在组件上进行鼠标基本操作时产生该事件
MouseListener接口中的方法:

  •         void mousePressed(MouseEvent e);
  •         void mouseReleased(MouseEvent e);
  •         void mouseClicked(MouseEvent e);
  •         void mouseEntered(MouseEvent e);
  •         void mouseExited(MouseEvent e);

MouseEvent中的常用方法:

  • int getButton();
  • boolean isAltDown();
  • boolean isControlDown();
  • boolean isShiftDown();
  • int getClickCount();
  • Point getPoint();
  • int getX();
  • int getY();
  • boolean isPopupTrigger();//是否是触发弹出式菜单的鼠标操作

5.5.4.2.MouseMotionListener

当在组件上进行鼠标拖动或移动时产生该事件
MouseMotionListener接口中的方法:

  •         void mouseDragged(MouseEvent);
  •         void mouseMoved(MouseEvent);

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

public class MainClass{
    public static void main(String[] args) {
        new MouseEvent_1();
    }
}
class MouseEvent_1 extends JFrame {
    private JPanel panel;
    //  鼠标上一次的坐标
    int pre_x = -1;
    int pre_y = -1;
    //  鼠标当前坐标
    int x;
    int y;
    public MouseEvent_1(){
        super("MouseListener——MouseMotionListener");
        panel = new JPanel();
        panel.addMouseMotionListener(new MouseMotionListener() {
            //  鼠标拖拽事件
            public void mouseDragged(MouseEvent e) {
                x = e.getX();
                y = e.getY();
                //  重画,调用repaint方法触发paint
                MouseEvent_1.this.repaint();
            }

            //  鼠标移动事件
            public void mouseMoved(MouseEvent e) {

            }
        });



        panel.addMouseListener(new MouseListener() {
            //  鼠标点击事件
            public void mouseClicked(MouseEvent e) {

            }

            //  鼠标按下事件
            public void mousePressed(MouseEvent e) {
                //  如果是右键
                if(e.getButton() == MouseEvent.BUTTON3){
                    //  擦除原来的轨迹
                    MouseEvent_1.this.panel.repaint();
                }
            }

            //  鼠标松开事件
            public void mouseReleased(MouseEvent e) {
                //  松开后恢复历史坐标
                pre_x = -1;
                pre_y = -1;
            }

            //  鼠标移入事件
            public void mouseEntered(MouseEvent e) {

            }

            //  鼠标移出事件
            public void mouseExited(MouseEvent e) {

            }
        });
        add(panel);
        setSize(500,350);
        setLocation(350,270);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void paint(Graphics graphics){
        //  设置画笔的颜色
        graphics.setColor(Color.red);

        //  历史坐标 > 0
        if(pre_x > 0 && pre_y > 0){
            //  开始画一条线
            graphics.drawLine(pre_x,pre_y,x,y);
        }

        //  保存当前鼠标坐标,作为上一次的鼠标坐标
        pre_x = x;
        pre_y = y;
    }
}

Java程序设计——Swing UI 事件处理(五)


5.5.5.ListSelectionEvent与ListSelectionListener

  • 当列表框中的项目发生变化时产生该事件
  • ListSelectionListener接口中的方法:void valueChanged(ListSelectionEvent e);
  • 处理事件时常使用列表框(JList)对象本身提供的一些方法

5.5.6.ChangeEvent 与 ChangeListener

  • 当进度条,滑动条、微调器、标签窗格等组件的状态发生变化时产生该事件
  • ChangeListener接口中的方法:void stateChanged(ChangeEvent);

5.5.7.FocusEvent 与 FocusListener

当组件获得或失去输入焦点时产生该事件
FocusListener接口中的方法:
                void focusGained(FocusEvent);
                void focusLost(FocusEvent);
FocusEvent中的常用方法:
                Component getOppositeComponent();

5.5.8.事件适配器类(Adapter)

只实现接口所需要处理的方法——通过覆盖
对于接口中的其它方法: 系统会提供默认的方法(方法体为空)
事件适配器类与事件监听器接口的区别?

  • 利用事件适配器类,只需实现所需处理的方法
  • 利用事件监听器接口,必须实现所有的方法

Java程序设计——Swing UI 事件处理(五)


import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

public class MainClass{
    public static void main(String[] args) {
        new MouseEvent_2();
    }
}
class MouseEvent_2 extends JFrame {
    private JPanel panel;
    int pre_x = -1;
    int pre_y = -1;
    int x;
    int y;
    public MouseEvent_2(){
        super("MouseAdapter——MouseMotionAdapter");
        panel = new JPanel();

        panel.addMouseMotionListener(new MouseMotionAdapter() {
            // 只需实现需处理的方法
            public void mouseDragged(MouseEvent e) {
                x = e.getX();
                y = e.getY();
                MouseEvent_2.this.repaint();
            }
        });


        panel.addMouseListener(new MouseAdapter() {
            // 只需实现需处理的方法
            public void mousePressed(MouseEvent e){
                if(e.getButton() == MouseEvent.BUTTON3){
                    MouseEvent_2.this.panel.repaint();
                }
            }
            public void mouseReleased(MouseEvent e){
                pre_x = -1;
                pre_y = -1;
            }
        });
        add(panel);
        setSize(300,400);
        setLocation(300,250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    public void paint(Graphics graphics){
        graphics.setColor(Color.red);
        if(pre_x>0 && pre_y>0){
            graphics.drawLine(pre_x,pre_y,x,y);
        }
        pre_x = x;
        pre_y = y;
    }
}

Java程序设计——Swing UI 事件处理(五)


(27条消息) Swing UI——容器(一)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125109643?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125109643%22%2C%22source%22%3A%22Mr_Morgans%22%7D&ctrtid=l9JMT(27条消息) Swing UI——基本组件(二)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125110881?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125110881%22%2C%22source%22%3A%22Mr_Morgans%22%7D&ctrtid=Kzbcx(27条消息) Swing UI——高级组件(三)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125115383?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125115383%22%2C%22source%22%3A%22Mr_Morgans%22%7D&ctrtid=81Bbq(27条消息) Swing UI——布局管理器(四)_Stuttering Guy的博客-CSDN博客https://blog.csdn.net/Mr_Morgans/article/details/125115409?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22125115409%22%2C%22source%22%3A%22Mr_Morgans%22%7D&ctrtid=GZyFf文章来源地址https://www.toymoban.com/news/detail-489155.html

到了这里,关于Java程序设计——Swing UI 事件处理(五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Java面向对象程序设计》学习笔记——CSV文件的读写与处理

    ​笔记汇总: 《Java面向对象程序设计》学习笔记 笔记记录的不是非常详实,如果有补充的建议或纠错,请踊跃评论留言!!! CSV 是英文 comma-separated values 的缩写,翻译为 “逗号分隔值“。 CSV 文件可以理解为以带逗号分隔(也可以是其他简单字符分割)的纯文本形式存储

    2024年02月10日
    浏览(43)
  • java swing UI第三方设计器JFormDesiner和FlatLaf UI

    官网:https://www.formdev.com/ 先去IDEA的插件市场安装吧 JFormDesiner是非开源,且付费的插件,可以自己去找找不付费的使用方法。在swing可视化设计UI非常高效快捷,初学者可能需要一定时间探索,熟悉一下代码生成流程。 创建一个JFormDesiner UI界面 下一步 设计完成之后,可以把相

    2024年01月17日
    浏览(38)
  • 实践分享:小程序事件系统设计

    微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。 小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函

    2024年02月13日
    浏览(35)
  • Python 程序设计入门(025)—— 使用 os 模块操作文件与目录

    Python 内置了 os 模块及其子模块 os.path,用于对目录或文件进行操作。在使用 os 模块及其子模块 os.path 模块时,需要使用 import 导入该模块,才能使用它们提供的函数或方法。 1、os 模块提供的操作目录的函数 os 模块提供的操作目录的函数如下表所示: 函数 说明 getcwd() 返回当

    2024年02月11日
    浏览(34)
  • 微信小程序的突发公共卫生事件互助平台 毕业设计源码43950

    赠送源码-毕业设计:SSM突发公共卫生事件互助平台小程序 https://www.bilibili.com/video/BV1J64y1p7dp/?vd_source=72970c26ba7734ebd1a34aa537ef5301 目  录 摘要 1 绪论 1.1 课题背景 1.2 研究现状 1.3 B/S体系工作原理 1. 4 ssm框架介绍 2 1. 5 论文结构与章节安排 3 2   突发公共卫生事件互助平台小程序 分

    2024年02月01日
    浏览(30)
  • 微信小程序的突发公共卫生事件互助平台 毕业设计源码44079

    赠送源码-毕业设计:SSM突发公共卫生事件互助平台小程序 https://www.bilibili.com/video/BV1J64y1p7dp/?vd_source=72970c26ba7734ebd1a34aa537ef5301 目  录 摘要 1 绪论 1.1 课题背景 1.2 研究现状 1.3 B/S体系工作原理 1. 4 ssm框架介绍 2 1. 5 论文结构与章节安排 3 2   突发公共卫生事件互助平台小程序 分

    2024年01月22日
    浏览(35)
  • 《抽象代数极简教程》全书目录 / By 禅与计算机程序设计艺术&ChatGPT

    —— By 禅与计算机程序设计艺术ChatGPT 1.1 集合的基本概念 1.2 二元运算 1.3 代数系统的定义 1.4 例子:整数集合的代数系统 2.1 群的定义 2.2 群的基本性质 2.3 群的例子 2.4 子群 2.5 商群 2.6 同态与同构 3.1 环的定义 3.2 环的基本性质 3.3 环的例子 3.4 理想 3.5 商环 3.6 同态与同构 4

    2024年02月03日
    浏览(34)
  • 【小黑嵌入式系统第六课】嵌入式系统软件设计基础——C语言简述、程序涉及规范、多任务程序设计、状态机建模(FSM)、模块化设计、事件触发、时间触发

    上一课: 【小黑嵌入式系统第五课】嵌入式系统开发流程——开发工具、交叉开发环境、开发过程(生成调试测试)、发展趋势 下一课: 【小黑嵌入式系统第七课】PSoC® 5LP 开发套件(CY8CKIT-050B )——PSoC® 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现 1、为什么要用C语言? 理

    2024年02月06日
    浏览(44)
  • 【软件设计师07】程序设计语言与语言处理程序基础

    编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多中程序语言特点 (逐渐降低考察比例,很少考察) 概念 文法类型 语法推导树 有限自动机 与正规式(重点) 常见问题:给一个串比如01、10、001等,看图中起点到终点能否连起来得到这样的串 正规式 是有限自

    2023年04月08日
    浏览(45)
  • 基于微信在线教育视频学习小程序毕业设计作品成品(11)视频详情和目录

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包