android監聽有4種實現方法,分別為:
自身類作為事件監聽器
外部類作為事件監聽器
匿名內部類作為事件監聽器
內部類作為事件監聽器
其中在大二學習Java的過程中,用的最多的是第三個「匿名內部類作為監聽器」
在學習監聽器之前,先回顧一下,
查了一下百度百科,他給的定義是:Java事件監聽器是由事件類和監聽介面組成,自定義一個事件前,必須提供一個事件的監聽介面以及一個事件類。JAVA中監聽介面是繼承java.util.EventListener的類,事件類繼承java.util.EventObject的類。
通俗來說就是:監聽器就是一個實現特定介面的普通java程式,這個程式專門用於監聽另一個java物件的方法呼叫或屬性改變,當被監聽物件發生上述事件後,監聽器某個方法將立即被執行。
監聽器在Java中是非常重要的一種方法。在生活中也經常會用到。
監聽器可以用來檢測網站的線上人數,統計網站的存取量等等!
監聽器涉及三個元件:事件源,事件物件,事件監聽器 當事件源發生某個動作的時候,它會呼叫事件監聽器的方法,並在呼叫事件監聽器方法的時候把事件物件傳遞進去。 我們在監聽器中就可以通過事件物件獲取得到事件源,從而對事件源進行操作!
(1)事件:使用者對元件的一個操作,稱之為一個事件
(2)事件源:發生事件的元件就是事件源
(3)事件監聽器(處理器):監聽並負責處理事件的方法
執行順序
1、給事件源註冊監聽器
2、元件接受外部作用,也就是事件被觸發
3、元件產生一個相應的事件物件,並把此物件傳遞給與之關聯的事件處理器
4、事件處理器啟動,並執行相關的程式碼來處理該事件。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
lass ThisClassEvent extends JFrame implements ActionListener{
JButton btn;
public ThisClassEvent(){
super("Java事件監聽機制");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn=new JButton("點選");
btn.addActionListener(this);
getContentPane().add(btn);
setBounds(200,200,300,160);
setVisible(true);
}
/**************************************/
public void actionPerformed (ActionEvent e){
Container c=getContentPane();
c.setBackground(Color.red);
}
/**************************************/
public static void main(String args[]){
new ThisClassEvent();
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ActionListenerDemo {
public static void main(String[] args) {
JFrame f = new JFrame(); //建立表單
JPanel p = new JPanel(); //建立面板
JButton btn = new JButton("點我"); //建立一個按鈕
//外部類的實現
//建立監聽器ActionListener
//new ActionListener();錯誤,介面不能new
//建立實現子類InterfaceDemo
InterfaceDemo a = new InterfaceDemo();
//將監聽器InterfaceDemo繫結到btn按鈕上
btn.addActionListener(a);
p.add(btn); //將按鈕新增到面板中
f.add(p); //將面板新增到表單中
f.setSize(400,300); //設定表單的大小
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設定關閉表單的後臺
f.setVisible(true); //設定表單可見
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//事件監聽器,ActionListener
public class InterfaceDemo implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("你點我了...");
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AnonymousEvent extends JFrame{
JButton btn;
public AnonymousEvent(){
super("Java事件監聽機制");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn=new JButton("點選");
/*匿名內部類******************************/
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
Container c=getContentPane();
c.setBackground(Color.red);
}
}
);
/***************************************/
getContentPane().add(btn);
setBounds(200,200,300,160);
setVisible(true);
}
public static void main(String args[]){
new AnonymousEvent();
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
ss InnerClassEvent extends JFrame{
JButton btn;
public InnerClassEvent(){
super("Java事件監聽機制");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn=new JButton("點選");
btn.addActionListener(new InnerClass());
getContentPane().add(btn);
setBounds(200,200,300,160);
setVisible(true);
}
/*內部類*********************************/
class InnerClass implements ActionListener{
public void actionPerformed (ActionEvent e){
Container c=getContentPane();
c.setBackground(Color.red);
}
}
/**************************************/
public static void main(String args[]){
new InnerClassEvent();
}
}