監聽器存在以下對象
監聽者:XxxxxListener - 所的監聽者是的接口。
被監聽者 :任意對象都可以成為被監聽者 - 早已經存在。
監聽到的事件:XxxxEvent- 永遠是一個具體類,用來放監聽到的數據
里面都有一個方法叫getSource() – 返回的是監聽到對象。
案例一:
package cn.hx.demo;
public class MyFrame extends JFrame {
public MyFrame() {
JButton btn = new JButton("你好"); //被監聽者
System.err. 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; } } 與上面的案例一進行對比,體會監聽器做了什么。
新聞熱點
疑難解答