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);
}
}
输出的结果: