Java事件处理 java.awt.event

article/2025/8/19 18:09:11

事件:程序对某些操作的响应

例子:点击按钮,打印“Hello”

Step1:事件响应类必须能够听到相应的命令
点击按钮如果要响应,必须让响应类实现java.awt.event.ActionListener 接口
Step2:将事件响应的代码,放在接口中重写的函数内
Step3:绑定,确保按钮发出命令,响应对象能够执行

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Printer implements ActionListener{ //①实现接口public void actionPerformed(ActionEvent e){     //②事件响应代码System.out.println("Hello");}
}class EventTest1 extends JFrame{private JButton jbt = new JButton("按钮");public EventTest1(){Printer p = new Printer();   jbt.addActionListener(p); //③绑定,确保按钮发出命令,p能够执行this.add(jbt,BorderLayout.NORTH);this.setSize(300,400);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}public static void main(String[] args)    {new EventTest1();}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;class EventTest2 extends JFrame implements ActionListener{private JButton jbt = new JButton("按钮");public EventTest2(){jbt.addActionListener(this); this.add(jbt,BorderLayout.NORTH);this.setSize(300,400);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}public void actionPerformed(ActionEvent e){     System.out.println("Hello");}public static void main(String[] args)    {new EventTest2();}
}

actionPerformed:我们可以看到第一段代码额外构建了一个函数Printer(),而第二个代码则运用用到了actionPerformed()
在这里插入图片描述

思考问题

问题1:点击按钮,需要响应类实现ActionListener,这是谁规定的?
答:Java中定义,不同的事件,由不同的XXXListener来监听。
问题2:列出什么样的事件,由什么样的Listener监听?
答案:后面再讲
问题3:事件响应函数中,ActionEvent参数是什么?
答案:表示命令发出时,封装的命令发出方的信息。

例:两个按钮,一个按钮点击,界面变红,另一个点击,界面变蓝
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;class EventTest3 extends JFrame implements ActionListener{private JButton jbt1 = new JButton("变红");	private JButton jbt2 = new JButton("变蓝");private JPanel jpl = new JPanel();public EventTest3(){this.add(jbt1,BorderLayout.NORTH);this.add(jbt2,BorderLayout.SOUTH);		this.add(jpl,BorderLayout.CENTER);		jbt1.addActionListener(this); jbt2.addActionListener(this); this.setSize(300,400);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}public void actionPerformed(ActionEvent e){     if(e.getSource()==jbt1){jpl.setBackground(Color.red);}else{jpl.setBackground(Color.blue);			}}public static void main(String[] args)    {new EventTest3();}
}

——————事件处理讲解完毕——————
①实现接口(监听器)②编写函数 ③绑定
这叫做:事件监听机制

什么样的事件,由什么样的Listener监听?

ActionListener(非常重要)

监听按钮点击,文本框内回车,菜单单击、其他支持单击响应的控件,以及一些拥有addActionListener函数的控件

ItemListener(比较重要)

监听选项变化时要响应的事件,如下拉菜单等

下拉菜单中有红绿蓝三个选项,选择时,界面自动变色
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class EventTest4 extends JFrame implements ItemListener {private JComboBox jcb = new JComboBox();	private JPanel jpl = new JPanel();public void itemStateChanged(ItemEvent e){if(jcb.getSelectedItem().equals("红")){jpl.setBackground(Color.red);}else if(jcb.getSelectedItem().equals("绿")){jpl.setBackground(Color.green);			}else{jpl.setBackground(Color.blue);			}}public EventTest4(){this.add(jcb,BorderLayout.NORTH);	this.add(jpl,BorderLayout.CENTER);			jcb.addItemListener(this);  jcb.addItem("红");			jcb.addItem("绿");		jcb.addItem("蓝");		this.setSize(300,400);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}public static void main(String[] args)    {new EventTest4();}
}

MouseListener:监听鼠标操作(单击,双击,进入,离开等)(比较重要)

public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}

例1:鼠标进入按钮,按钮变红,退出,按钮变白
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;class EventTest5 extends JFrame implements MouseListener{private JButton jbt = new JButton("按钮");public EventTest5(){jbt.addMouseListener(this); this.add(jbt,BorderLayout.NORTH);this.setSize(300,400);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) {jbt.setBackground(Color.red);}public void mouseExited(MouseEvent e) {jbt.setBackground(Color.white);}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public static void main(String[] args)    {new EventTest5();}
}
例2:界面上有一个图片,鼠标进入,图片随机躲开
import javax.swing.*;
import java.awt.event.*;class EventTest6 extends JFrame implements MouseListener{private JLabel jlb = new JLabel();int X=50,Y=50;public EventTest6(){Icon icon = new ImageIcon("img.jpg");jlb.setIcon(icon);this.setLayout(null);		this.add(jlb);jlb.setSize(icon.getIconWidth(),icon.getIconHeight());jlb.setLocation(X,Y);jlb.addMouseListener(this); this.setSize(400,600);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) {X = (int)(Math.random()*this.getWidth())-jlb.getWidth();Y = (int)(Math.random()*this.getHeight())-jlb.getHeight();jlb.setLocation(X,Y);}public void mouseExited(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public static void main(String[] args)    {new EventTest6();}
}

MouseMotionListener(比较重要)

监听鼠标移动和拖动操作

例:鼠标在界面上移动,标题栏显示鼠标的当前坐标
import javax.swing.*;
import java.awt.event.*;class EventTest7 extends JFrame implements MouseMotionListener{public EventTest7(){this.addMouseMotionListener(this);this.setSize(400,600);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}public void mouseDragged(MouseEvent e) {String str = e.getX() + "," + e.getY();this.setTitle(str);}public void mouseMoved(MouseEvent e)  {}public static void main(String[] args)    {new EventTest7();}
}
作业

作业:界面上有一个图片,鼠标可以将图片从一个地方拖动到另一个地方
作业:界面上有10个图片,鼠标可以将某个图片从一个地方拖动到另一个地方

KeyListener(比较重要)

监听键盘输入时要响应的事件(如俄罗斯方块)

例:使用键盘上的上下左右键,能控制界面上一个图片的上下左右移动
import javax.swing.*;
import java.awt.event.*;class EventTest8 extends JFrame  implements KeyListener{private JLabel jlb = new JLabel();int X=50,Y=50;public EventTest8(){Icon icon = new ImageIcon("img.jpg");jlb.setIcon(icon);this.setLayout(null);		this.add(jlb);jlb.setSize(icon.getIconWidth(),icon.getIconHeight());jlb.setLocation(X,Y);this.addKeyListener(this);this.setSize(400,600);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}	public void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();if(keyCode==KeyEvent.VK_UP){Y-=30;}else if(keyCode==KeyEvent.VK_DOWN){Y+=30;}else if(keyCode==KeyEvent.VK_LEFT){X-=30;}else if(keyCode==KeyEvent.VK_RIGHT){X+=30;}jlb.setLocation(X,Y);} public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e)  {}public static void main(String[] args)    {new EventTest8();}
}

注意:键盘事件一般被更大的容器先截获。

综合案例:界面一个图片掉下,鼠标进入,暂停,离开,继续掉

import javax.swing.*;
import java.awt.event.*;class EventTest9 extends JFrame  implements Runnable,MouseListener {private JLabel jlb = new JLabel();int X=50,Y=50;boolean RUN = true;public EventTest9(){Icon icon = new ImageIcon("img.jpg");jlb.setIcon(icon);this.setLayout(null);		this.add(jlb);jlb.setSize(icon.getIconWidth(),icon.getIconHeight());jlb.setLocation(X,Y);this.addMouseListener(this);this.setSize(400,600);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);new Thread(this).start();}	public void mouseClicked(MouseEvent e) {}public void mouseEntered(MouseEvent e) {RUN = false;}public void mouseExited(MouseEvent e) {RUN = true;new Thread(this).start();}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}	public void run(){while(RUN){try{Thread.sleep(100);		}catch(Exception e){}Y+=20;		jlb.setLocation(X,Y);}}public static void main(String[] args)    {new EventTest9();}
}

AdjustmentListener:监听一些具有调整功能的控件(有点重要)

FocusListener:监听当控件获得或者失去焦点时要响应的事件


http://chatgpt.dhexx.cn/article/NeV3G0Q4.shtml

相关文章

import java.awt 无法_java awt教程import java.awt.*

java awt教程import java.awt.* java.awt.* 这里的java是包名,包对应的就是你磁盘当中的目录,你可以看成文件夹,awt是这个包当中的子包, 连起来也就是这个java包当中的awt子包.中间用"."来连接. "import"是导入包中的类的意思 ,java程序当中,除了java.lo…

Java基础_15 | Java中的图形用户界面包AWT使用详解

1. Java中的AWT包 在Java中, AWT(Abstract Window Toolkit)是用来处理图形最基本的方式,它可以用来创建Java的图形用户界面程序, AWT包提供: 图形界面组件:如:窗口、按钮、菜单等…

Java AWT布局

java.awt库提供5种基本布局。 每种布局都有其自身的意义,并且它们是完全不同的。 在本文的此处,我们将讨论如何将任何布局应用于框架或面板,并简要讨论每种布局。 java.awt库中可用的5种布局是: 边框布局 网格布局 GridBag布局 卡布局 流程布局 1.边框布局 BorderLayout…

swing java awt_java中AWT和SWing的区别与联系

AWT和Swing都是java中的包。 AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。 Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。 AWT和Swing的实现原理不同: AWT的图…

java awt 教程,Java AWT教程

Java AWT教程 Java AWT(抽象窗口工具包)是一种API,用于使用Java开发GUI或基于窗口的应用程序。 Java AWT组件是平台相关的,即,组件是根据操作系统视图显示的。 AWT是重量级的,即其组件正在使用OS的资源。 java.awt包为AWT api提供…

swing java awt_Java awt和Swing的区别

Java awt是Java中早期用于编写图形图形应用程序的开发包,Swing是在awt的基础上构建的一套新的图形图像界面系统。简单来说,Swing是awt的扩展以及改良。那么我们来说一下关于Java中awt和swing的关系以及区别。 AWT awt是Abstract Window ToolKit (抽象窗口…

java awt 教程,Java AWT教程介绍

本文概述 Java AWT(抽象窗口工具包)是一种API, 用于使用Java开发GUI或基于窗口的应用程序。 Java AWT组件是依赖于平台的, 即, 根据操作系统的视图显示组件。 AWT是重量级的, 即其组件正在使用OS的资源。 java.awt包为AWT api提供了一些类, 例如TextField, Label, TextArea, Ra…

java awt类_JAVA中AWT编程

JAVA使用AWT和Swing 类完成图形用户界面编程,AWT全称是抽象窗口工具集(Abstract Window Toolkit),它是最早的sun提供的GUI库(Graphics User Interface)图形用户界面。 AWT是窗口框架,它从不同平台的窗口系统中抽取共同组件,当使用AWT编写图形…

AWT介绍

推荐阅读:Java图形界面详解(AWT、Swing) 专栏 文章目录 概述AWT继承体系 概述 Java使用AWT和Swing相关的类可以完成图形化界面编程,其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit),它是sun公司最早提供的GUI库,这个GUI库提供了一些…

AWT概述

目录 AWT继承关系 window Panel 布局管理器 FlowLayout(流式布局管理器) BorderLayout(边界布局管理器) GridLayout(网格布局管理器) GridBagLayout(网格包布局管理器) CardLayout(卡片布局管理器)…

Java基础--awt详解以及简单应用

GUI 图形用户界面 CLI 命令行用户接口 Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中. Java当中如何完成图形化界面的制作呢? AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好. Javax.Swing:在AWT基础上.建立一…

【Java基础】之AWT,一篇文章搞懂awt(包含绘图)

🌈博客主页:屠一乐的博客 📅 发文时间:2022.3.15 🎈 一定存在只有你才能做成的事 🌹 博主水平有限,如有错误,欢迎指正 欢迎给位👍收藏💎评论✉ Java awt &…

JavaGUI界面—窗口、按钮、文本框,及其解决按钮的中文乱码

一. Java图形化界面开发概述 通常情况下,java语言一般是用来开发后台程序的,所谓的后台程序就是部署在服务器端的程序,默默的工作,用户是看不到任何界面的。 事实上,我们使用java语言同样可以完成图形化界面程序的开…

Java GUI编程1---AWT简介

图形用户界面特征 图形用户界面(GUI)编程主要有以下几个特征: 图形界面对象及其框架(图形界面对象之间的包含关系)图形界面对象的布局(图形界面对象之间的位置关系)图形界面对象上的事件响应(图形界面对象上的动作) 在Java图形界面开发中有两种可使用的技术&…

Java图形化界面编程之——AWT

目录 1、AWT简介 2、AWT继承体系 3、Container容器 3.1、Container继承体系 3.2、常用API 3.2.1、Component的常用方法 3.2.2、Container的常用方法 3.3、容器演示 3.3.1、Window 3.3.2、Panel 3.3.3、ScrollPane 4、LayoutManager布局管理器 4.1、FlowLayout&…

Putty的使用及登录

Putty的使用及登录 Putty作为一个很方便并且免费的工具,下面就教大家如何下载并且进行免密登录 下载 https://www.putty.org/ 安装完成后会有如下几个选项,这里简单做一下介绍,第一个是秘钥生产工具,第二个是连接工具&#xff0c…

使用putty连接Linux

修改显示行数: 修改字体: 修改中文显示:

putty使用方法~SSH等

我的这些文字是从这几年来的 PuTTY 使用经验中慢慢得来的,也不仅仅是介绍 PuTTY,还包括了一些相关的软件,比如:优秀的 FTP 工具 FileZilla、功能强大的 SFTP 客户端 WinSCP。 杂七杂八的乱说了一些,这里把大致内容罗列…

怎样用putty设置SSH tunnel

http://davihigh.spaces.live.com/blog/cns!E64F2DAC77562C4F!115.entry 怎样用putty设置SSH tunnel 凡是不晓得SSH为何物的朋友可以略过,也可以google SSH开始了解它。这儿不重复了。SSH tunnel的功能简单说来,就是实现A主机XXX端口跟B主机YYY端口之间…

putty linux上安装及使用

方法1. 用的是debian类系统,可以直接用源里的putty 安装更简单 apt-get install putty 方法2.编译安装 官网下载地址 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 使用 filezilla 工具将文件上传到Linux 系统中 解压…