1.原理:
當范圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。
例如:創建一個“人”類Class Person
人擁有吃的方法public void eat(){},我們的目的就是,在這個人吃之前要提醒他洗手,所以我們就要監聽這個人,不管他在什么時候吃,我們都要能夠監聽到並且提醒他洗手,通俗點講這個就是監聽器的作用(在吃之前提醒他洗手)。
2.組成:
2.1Java的時間監聽機制涉及到三個組件:事件源、事件監聽器、事件對象
2.2當事件源上發生操作時,它會調用事件監聽器的一個方法,並且調用這個方法時,會傳遞事件對象過來
2.3事件監聽器是由開發人員編寫,開發人員在事件監聽器中,通過事件對象可以拿到事件源,從而對事件源上的操作進行處理
3.實現:
3.1創建一個人類,人具有跑、吃的方法 (創建一個事件源)
3.2創建一個接口用來監視人的跑、吃 (事件監聽器)
3.3創建一個事件對象,里面用來封裝人(Person)這個對象 (事件對象)
3.4創建一個測試類,用來測試Java監聽機制
4.源碼下載:http://pan.baidu.com/s/1kUOOoV9
首先創建事件源
//事件源
public class Person {
//1.1首先定義一個私有的、空的監聽器對象,用來接收傳遞進來的事件監聽器(相當於一個全局變量)
private PersonListener listener;
//1.2將傳遞進來的事件監聽器付給1.1中的listener
public void registerListener(PersonListener personListener){
this.listener=personListener;
}
//1.3判斷listener是否為null,如果不為空,則執行監聽器中的方法,否則照常調用
public void run(){
if(listener!=null){
Even even=new Even(this);
this.listener.dorun(even);
}
System.out.println("人具有跑的方法");
}
//1.4和1.3一個道理
public void eat(){
if(listener!=null){
Even even=new Even(this);
this.listener.doeat(even);
}
System.out.println("人具有吃的方法");
}
}
創建事件監聽器
//事件監聽器
interface PersonListener{
public void dorun(Even even);
public void doeat(Even even);
}
創建事件對象
//事件對象
class Even{
private Person person;
public Even(Person person) {
super();
this.person = person;
}
public Even() {
super();
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
*到這步我們已經把一個完整的Java監聽器做完,下一步我們做測試
注意:要實現監聽,必須調用它所對應的方法例如下面的registerListener,而且必須要實現監聽器接口PersonListener
public class TestListener {
public static void main(String[] args) {
Person person=new Person();
person.registerListener(new MyPersonListener());
person.run();
person.eat();
}
}
//實現監聽器接口中的方法
class MyPersonListener implements PersonListener{
@Override
public void dorun(Even even) {
Person person = even.getPerson(); //拿到事件源
System.out.println("人在跑之前執行的動作");
}
@Override
public void doeat(Even even) {
System.out.println("人在吃之前執行的動作");
}
}

