java监听器练习
1.一个简单的监听器示例
IMyListener
public interface IMyListener {
public void doReadBook();
public void doSleep();
}
MyListenerImpl
public class MyListenerImpl implements IMyListener{
@Override
public void doReadBook() {
System.out.println("Listener:有人doReadBook");
}
@Override
public void doSleep() {
System.out.println("Listener:有人doReadBook");
}
}
MyPerson
package com.glx.testListener;
public class MyPerson {
public IMyListener myListener;
public String UserName;
public MyPerson(String username,IMyListener plistener){
this.myListener=plistener;
this.UserName=username;
}
public void doReadBook(){
System.out.println("person:doReadBook");
//同时告诉监听器:我开始doReadBook了,你要监控我
this.myListener.doReadBook();
}
public void doSleep(){
System.out.println("person:doSleep");
//同时告诉监听器:我开始doSleep了,你要监控我
this.myListener.doSleep();
}
}
main
public class myMain {
public static void main(String[] args){
System.out.println("main启动");
IMyListener myListener=new MyListenerImpl();
MyPerson myPerson=new MyPerson("zhangsan",myListener);//实例化的时候相当于注册了监听
myPerson.doReadBook();
myPerson.doSleep();
}
}
简单的监听器到这里就结束了,实质也就类调用另外一个类的方法。
假如监听器想知道doReadBook事件源的一些信息怎么办?譬如说,我想知道是谁在看书,是谁在睡觉怎么办?
增加一个类:MyEvent,这个类用来承载事件源MyPerson,将他里面的信息全部打包当做参数带过去。
改造一下:
IMyListener
public interface IMyListener {
public void doReadBook(MyEvent myEvent);//增加事件参数
public void doSleep(MyEvent myEvent);//增加事件参数
}
MyListenerImpl
public class MyListenerImpl implements IMyListener{
@Override
public void doReadBook(MyEvent myEvent) {
System.out.println("Listener:有人doReadBook"+",他的名字是:"+myEvent.person.UserName);
}
@Override
public void doSleep(MyEvent myEvent) {
System.out.println("Listener:有人doReadBook"+",他的名字是:"+myEvent.person.UserName);
}
}
MyEvent
public class MyEvent {
public MyPerson person;
public MyEvent(MyPerson arg_person){
this.person=arg_person;
}
public MyPerson getPerson() {
return person;
}
public void setPerson(MyPerson person) {
this.person = person;
}
}
MyPerson
public class MyPerson {
public IMyListener myListener;
public String UserName;
public MyPerson(String username,IMyListener plistener){
this.myListener=plistener;
this.UserName=username;
}
public void doReadBook(){
System.out.println("person:doReadBook");
MyEvent myEvent=new MyEvent(this);//我要我自己这个事件源(MyPerson传给事件MyEnent)
//同时告诉监听器:我开始doReadBook了,你要监控我
this.myListener.doReadBook(myEvent);
}
public void doSleep(){
System.out.println("person:doSleep");
MyEvent myEvent=new MyEvent(this);//我要我自己这个事件源(MyPerson传给事件MyEnent)
//同时告诉监听器:我开始doSleep了,你要监控我
this.myListener.doSleep(myEvent);
}
}
myMain
public class myMain {
public static void main(String[] args){
System.out.println("main启动");
IMyListener myListener=new MyListenerImpl();
MyPerson myPerson=new MyPerson("zhangsan",myListener);
myPerson.doReadBook();
myPerson.doSleep();
}
}
运行结果:
main启动
person:doReadBook
Listener:有人doReadBook,他的名字是:zhangsan
person:doSleep
Listener:有人doReadBook,他的名字是:zhangsan
Process finished with exit code 0