监听器:是一个实现了特定接口的java程序 这个程序专门用于监听另一个对象的 方法调用 或 属性改变 或 对象的创建销毁,当被监听的对象发生了上述的事件 就会出发监听器的调用 也就是监听器的某个方法会被执行。
三个角色:
1.被监听的对象 也就是事件源:注册监听器 关联监听器 对象
2.被监听的对象身上发生了什么事 事件: 封装了事件源和动作
3.触发监听器的方法执行 监听器:doXXX(Event e)
当事件源发生某一个动作(事件),他就会调用监听器的一个方法,并在调用这个方法的时候,把事件对象传进去,开发人员就可以在监听器中通过事件对象 得到事件源 从而对事件源进行操作
/**
* @author GuoShuo
* @date 2022/7/4 20:04
*/
public class ListenerDemo2 {
public static void main(String[] args) {
//创建事件源
Student student = new Student();
student.setName("张三");
student.addListener(new StudentListener() {
@Override
public void doSleep(Event e) {
Student source = e.getSource();
System.out.println(source.getName()+"受到了处罚");
}
});
student.sleep();
}
}
// 事件源
class Student{
// 事件源 注册监听器
private StudentListener studentListener;
public void addListener(StudentListener studentListener){
this.studentListener = studentListener;
}
private String name;
public void eat(){
System.out.println("吃午饭了");
}
public void sleep(){
System.out.println(this.getName() + "在睡觉");
studentListener.doSleep(new Event(this));
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// 监听器
interface StudentListener{
public void doSleep(Event e);
}
// 事件对象
class Event{
// 通过 事件对象得到事件源
private Student source;
public Event() {
}
public Event(Student student) {
this.source = student;
}
public Student getSource() {
return source;
}
public void setSource(Student source) {
this.source = source;
}
}