Java的事件监听机制的定义
Java事件监听机制其实是一种对于触发后的相应机制,这种机制通常是在图形界面中使用。比如我们点击一个按钮,或者在文本框中输入一些数据等,程序会进行的一系列的措施进行相应。
1.事件的源对象
(1)在Java的机制中只有容器组件和元素组件可以成为事件源的对象。(2)在图形界面中,一个动作发生的组件,那么这个组件就是事件源对象。
容器组件详见:
链接: Swing中常用容器和组件.
链接: Java中的容器组件和非容器组件.
元素组件:?未在百度上找到
2.事件的监听方法
(1)事件的监听方法是由事件源对象提供的。
(2)事件监听方法的获取是由事件源上的动作执行的。如果有动作发生,事件的监听方法捕获这个动作,并收集事件源对象的信息和它的动作信息,然后把这些信息交给事件接口的对象进行处理。
3.事件接口/事件处理类
事件接口对象拿到信息后,它会根据所做的动作信息(鼠标的点击、键盘的按键信息等)去调用对应的事件处理方法(把动作信息和事件源对象的信息封装到**Event的对象中),执行方法中的代码。
4.程序示例
思路:
(1)构建一个窗体,定义一个“start”按键
(2)定义LoginListener事件处理类,该类继承ActionListener动作事件接口,重写接口中的抽象方法。
(3)实例化LoginListener事件处理对象。
(4)给事件处理类对象添加动作监听方法,指定事件处理类对象。
说明:
事件的源对象:start按键
事件监听方法:addActionListener(ActionListener 1),动作事件监听方法,捕获类似按钮组件上的鼠标点击动作,然后收集事件源对象的信息和动作信息,接着将信息交给ActionListener接口的对象进行处理。
事件接口/事件处理类:ActionListener;ActionListener的对象拿到事件源对象的信息和动作信息后,就会根据动作信息调用事件处理;方法actionPerformed(ActionEvent e),把信息封装到处理方法的ActionEvent参数对象中,最后执行方法中的代码。
代码部分:
//构造窗体
package Login20190318;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
//Draw类继承JFrame类 相当于Draw类就是JFrame类 直接调用JFram类中的属性和方法
public class Draw extends JFrame
{
//入口主函数
public void initUI()
{
//设置窗口的大小
this.setSize(1500,600);
FlowLayout flowlayout=new FlowLayout(FlowLayout.CENTER,5,5);
this.setLayout(flowlayout);
//设置按键标题
JButton button=new JButton("Start");
this.add(button);
this.setVisible(true);
//使窗体获得绘图板权限
Graphics graphics=this.getGraphics();
//实例化监听方法类 并传入参数
DrawLis drawlis=new DrawLis(graphics);
//使按钮button调用监听方法
button.addActionListener(drawlis);
}
public static void main(String[] args)
{
//实例化Draw类并调用入口函数
Draw draw=new Draw();
draw.initUI();
}
}
//定义事件监听方法的类
package Login20190318;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.awt.Graphics;
//实现监听接口
public class DrawLis implements ActionListener
{
private Graphics g;
//构造方法用于传参
public DrawLis(Graphics g)
{
this.g=g;
}
//定义监听方法,画一个椭圆
public void actionPerformed(ActionEvent e)
{
Random random = new Random();
int x=random.nextInt(1600);
int y=random.nextInt(1600);
g.fillOval(x,y,60,70);
}
}
本文对原文加入了一点自己的理解。
引用链接:https://blog.youkuaiyun.com/weixin_43772533/article/details/88675664