標籤:
監聽器存在以下對象
監聽者:XxxxxListener - 所的監聽者是的介面。
被監聽者 :任意對象都可以成為被監聽者 - 早已經存在。
監聽到的事件:XxxxEvent- 永遠是一個具體類,用來放監聽到的資料
裡面都有一個方法叫getSource() – 返回的是監聽到對象。
案例一:
package cn.hx.demo;
public class MyFrame extends JFrame {
public MyFrame() {
JButton btn = new JButton("你好"); //被監聽者
System.err.println("btn: is:"+btn.hashCode());
btn.addActionListener(new MyListener() ); //監聽者
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//擷取容器
Container con= getContentPane();
//設定布局
con.setLayout(new FlowLayout());
con.add(btn);
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new MyFrame();
}
//實現一個監聽者
class MyListener implements ActionListener{
//監聽方法
public void actionPerformed(ActionEvent e) {
System.err.println("我監聽到了:"+e.getSource()hashCode()); //可以從監聽到的事件中獲監聽到的對象。
}
}
}
案例二:
觀察者模式類比監聽
package cn.hx.demo;
public class TestObersver {
public static void main(String[] args) {
Person person = new Person();//聲明被觀察者
System.err.println("pp:"+person);
person.addPersonListener(new PersonListener() {
public void running(PersonEvent pe) {
System.err.println("你正在跑....."+pe.getSource());
throw new RuntimeException("他跑了。。。");
}
});
person.run();
}
}
class Person{
private PersonListener pl;
public void addPersonListener(PersonListener pl){
this.pl = pl;
}
public void run(){
if(pl!=null){
pl.running(new PersonEvent(this));
}
System.err.println("我正在跑步......");
}
}
interface PersonListener{
void running(PersonEvent pe);
}
class PersonEvent{
private Object src;
public PersonEvent(Object obj) {
this.src=obj;
}
public Object getSource(){
return src;
}
}
與上面的案例一進行對比,體會監聽器做了什麼。
java—監聽器 (55)