Java中事件监听机制

Java中事件监听机制

一、事件监听机制的定义

要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如,在输入框中输入数据,点击按钮或者菜单,这些操作我们就称之为事件
事件监听机制,顾明思义,就是去监听事件有没有发生,类似于我们要监视一间房子里面会发生什么样的事情,就会给这座房子按上一个摄像头。对于这样的事件的处理,在Java中也有类似的机制。比如我们需要去监听一个按钮有没有被点击,就要给按钮上装上类似监视器的东西。这个东西我们就把它叫做事件监听器。而监听按钮有没有被点击的这种机制就是事件监听机制
在Java当中,每一个事件都会有对应的事件监听器。他们都被定义在Java.awt.event这个包当中:

二、事件监听机制的组成

1)事件对象,即通常继承 Java.awt.eventObjec t的对象,一般可以用来判断事件类型的作用;
2)事件源,即触发事件的源头,在GUI和Swing编程中,如Button按钮等对象就是一个事件源;
3)事件监听器,即负责监听事件源发出的事件并做出响应动作的对象,通常实现 java.util.EventListener接口

三、事件监听的一般流程

1)事件源注册监听器
2)事件发生时,事件源向监听器发送事件对象
3)监听器对象响应事件

四、给组件添加监听器

由于事件监听器的是定义都是接口,所以我们必须自己定义一个类来实现对应的接口。 比如,我们要监听一个按钮是否被点击了,可以这样做,代码如下:

package com.yf1006;
import java.awt.event.ActionEvent;

//通过定义一个ButtonListener类来实现对应的接口,这样一个简单的动作事件监听器实现:监听按钮是否被点击了!
//其中java.awt.event.ActionListener是一种动作监听器,它是属于一种接口的,所以需要定义一个类来实现接口的!!
public class ButtonListener implements java.awt.event.ActionListener{
    
    
	//在这里必须要重写接口中的方法:事件发生时,这个方法被自动调用了。
		public void actionPerformed(ActionEvent e) {
    
    
			System.out.println("按钮被点击了!");
		}
	}

这样,就可以完成一个事件监听器类的编写,但是我们需要创建一个主类所谓的主类,即类的名字和文件名一致,并且包含main函数的类),在主类中去添加按钮等组件,并且创建监听器对象,然后再将监听器添加给按钮,从而完整地实现一个按钮的监听事件机制。例子的代码如下:

package com.yf1006;

//import java.awt.Dimension;

//import javax.swing.JLabel;

//import java.awt.FlowLayout;

//import javax.swing.JFrame;

public class Login_test {
    
    
	public static void main(String[] args) {
    
    
		Login_test log = new Login_test();
		log.showUI();
	}
	public void showUI() {
    
    
		//创建窗口
		javax.swing.JFrame jf = new javax.swing.JFrame();
		jf.setSize(600, 600);
		jf.setTitle("窗口");
		
		//居中显示
		jf.setLocationRelativeTo(null);
		//关闭进程
		jf.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
		
		//流式布局管理器
		java.awt.FlowLayout fl = new java.awt.FlowLayout();
		jf.setLayout(fl);
		
		//导入图片
		javax.swing.ImageIcon img = new javax.swing.ImageIcon("F:\\桌面\\1.jpg");//为啥导入照片2则没有啥用呢
		//标签(导入的图片是需要先赋给标签,通过标签的形式去给窗体上面加图片)
		javax.swing.JLabel jl = new javax.swing.JLabel(img);
		jf.add(jl);
		
		//用户名
		javax.swing.JLabel user = new javax.swing.JLabel("账户");
		jf.add(user);
		
		//文本框
		javax.swing.JTextField jtf = new javax.swing.JTextField();
		java.awt.Dimension dim = new java.awt.Dimension(400, 40);
		jtf.setPreferredSize(dim);
		jf.add(jtf);
		
		//用户名1
		javax.swing.JLabel user1 = new javax.swing.JLabel("密码");
		jf.add(user1);
		
		//文本框1
		javax.swing.JTextField jtf1 = new javax.swing.JTextField();
		java.awt.Dimension dim1 = new java.awt.Dimension(400, 40);
		jtf1.setPreferredSize(dim1);
		jf.add(jtf1);
		
		//按钮
		javax.swing.JButton jb = new javax.swing.JButton("登录");
		jf.add(jb);
		
		//利用ButtonListener类,创建监听器对象
		ButtonListener bl = new ButtonListener();
		
		//将监听器添加给按钮
		jb.addActionListener(bl);
		
		//可视化
		jf.setVisible(true);
	}
}

输出的结果:

猜你喜欢

转载自blog.csdn.net/qq_39350172/article/details/109169568