1. 程式人生 > >JAVA入門到精通-第36講-事件監聽-坦克大戰4

JAVA入門到精通-第36講-事件監聽-坦克大戰4

Java事件處理機制:  事件源;事件;事件監聽者;事件處理方法;  任何一個類,只要實現了相應的介面,就可以去監聽某個事件源;
一個類要實現監聽的基本步驟:   a.實現相應的介面[KeyListener,MouseListener,ActionListener,WindowListener] b.把介面的處理方法根據需要重新編寫(override) c.在事件源註冊監聽 d.事件傳遞是靠事件物件

通過ActionEvent傳遞事件; 通過事件進行委派事件模型進行事件處理;  一個事件源可能會生成多個不同型別的事件:  繪圖的時候有Panel,Panel上有按鈕;  JPanel上滑鼠可以點選,移動,也是一種事件;        JAVA處理機制的內部實現;    
     根據需要選擇監聽介面; 一個類可以實現一個監聽介面,也可以實現多個監聽介面;  Panel繪圖; 滑鼠移動介面: MouseListener 
 拿到滑鼠的位置:  getX    getY
鍵盤監聽:KeyListener Press 和 Type有什麼區別 :F1鍵 對於TYPE是不會觸發的;
  滑鼠移動和拖拽的事件的監聽: MouseMotionListener:    this.addMouseMotionListener(mp);
視窗的關閉,最大化,最小化事件監聽: WindowEventListener  事件源、事件監聽、事件註冊都是分類的;
----------------------------------------------------------------------- java事件處理機制--深入理解 前面提到了幾個重要的概念 1、事件源;2、事件;3、事件監聽器 這幾個概念非常重要,必需要搞清楚。 1、事件源     事件源是一個產生(或觸發)事件的物件,比如前面的JButton的一個物件jb1。當這個事件源物件的某些狀態以某種方式發生變化時,就會產生某種型別的事件(一個事件源可能會生成多個不同型別的事件)。如果某個元件(物件)希望得到事件源產生的事件,就需要在這個事件源上註冊。 2、事件 事件就是承載事件源狀態改變時的資訊物件。或者說,事件是事件源事件監聽器傳輸事件源狀態資訊的載體。在使用者與GUI元件進行互動時就會生成事件,比如當滑鼠在面板中移動時,就會生成一個滑鼠移動事件的物件,而這個物件儲存著當前滑鼠在面板中位置資訊。java.awt.event包和javax.swing.event包中定義了各種事件型別,常見的事件類有:
事件類                                           說明
ActionEvent              通常在按下按鈕,或雙擊一個列表項或選中某個選單時發生
AdjustmentEvnet      當操作一個滾動條時發生
ComponentEvent      當一個元件隱藏、移動、改變大小時傳送
ContainerEvent          當一個元件從容器中加入或者刪除時發生
FocusEvent                 當一個元件獲得或是失去焦點時發生
ItemEvent                      當一個複選框或是列表項被選中時,當一個選擇框或選擇選單被選中
KeyEvent                      當從鍵盤的按鍵被按下,鬆開時發生
MouseEvent                當滑鼠被拖動、移動、點選、按下..
TextEvent                      當文字區和文字域的文字發生改變時發生
WindowEvent               當一個視窗啟用、關閉、失效、恢復、最小化...

3、事件監聽器介面     事件源產生一個事件,可以傳送給事件監聽者處理,那麼怎樣才能編寫一個事件監聽者呢?     事件監聽者實際上就是一個類,該類實現了某個事件監聽器介面、比如前面我們案例中的MyPanel就是一個類,它實現了ActionListener介面,它就可以作為一個事件監聽者,對接受到的事件進行處理。     事件監聽器介面有多種,不同的事件監聽器介面可以監聽不同的事件,一個類可以實現一個事件監聽介面,也可以實現多個監聽介面,這些介面在java.awt.event和javax.swing.event包中定義。
java事件處理機制--總結 總結--事件程式設計步驟: 1、編寫事件處理類(事件監聽者) 2、根據需求給事件處理類實現監聽器介面 3、在事件處理中重寫(實現)其事件處理的函式 4、在事件源類中指定該事件的監聽器(響應者)是誰
注意事項: 1、java採用委託機制處理事件 2、java中的事件是分類的,比如對窗體事件、滑鼠事件、按鍵事件、操作事件[按按鈕] 3、java中一個類要監聽某個事件,則必需實現相應的事件監聽介面 4、事件監聽介面有多種,程式設計師應當針對不同的情況,實現不同的監聽介面,比如監聽滑鼠事件就應當實現MouseListener;要監聽鍵盤事件,就應當實現KeyListener.. 5、在實現監聽介面的類(事件監聽類/者)中,需要重寫處理函式,比如實現了ActionListener介面,就應當重寫actionPerformed(ActionEvent e),可以參考前面的事件監聽器介面表格 6、在事件源中需要註冊事件監聽類。否則事件監聽類接收不到事件源發生的事件。
一個類要實現監聽的步驟: a、實現相應的介面[KeyListener/MouseListener/ActionListener/WindowListener] b、把介面的處理方法根據需要重新編寫(Override) c、在事件源上註冊監聽 d、事件傳遞是靠事件(類)物件
例項[Window018.java]
  1
/**
2
 * 單事件源、多事件監聽,多事件處理
3
 */
4
import java.awt.*;
5
import javax.swing.*;
6
import java.awt.event.*;
7
public class Window018 extends JFrame{
8
    //設定元件
9
    MyPanel mp=null;
10
    public static void main(String[] args) {
11
        Window018 win=new Window018();
12
    }
13
14
    public Window018(){
15
        //建立元件
16
        mp=new MyPanel();
17
        
18
        //註冊監聽
19
        this.addMouseListener(mp);
20
        this.addMouseMotionListener(mp);
21
        this.addKeyListener(mp);
22
        this.addWindowListener(mp);
23
        
24
        //加入元件
25
        this.add(mp);
26
        //設定窗體
27
        this.setTitle("事件多監聽多處理");
28
        this.setSize(400, 300);
29
        this.setLocationRelativeTo(null);
30
        this.setVisible(true);
31
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
32
    }
33
}
34
//1、讓MyPanel知道滑鼠按下的訊息,並且知道點選的位置(x,y)
35
//2、讓MyPanel知道哪個鍵按下了
36
37
class MyPanel extends JPanel implements MouseListener,MouseMotionListener,KeyListener,WindowListener{
38
    public void paint(Graphics g){
39
        super.paint(g);
40
    }
41
42
    //滑鼠點選(mouseClicked)
43
    public void mouseClicked(MouseEvent e) {
44
        System.out.println("滑鼠點選了x="+e.getX()+"y="+e.getY());
45
    }
46
47
    //滑鼠移動到MyPanel(mouseEntered)
48
    public void mouseEntered(MouseEvent e) {
49
        System.out.println("滑鼠移動到MyPanel上了");
50
    }
51
52
    //滑鼠離開MyPanel(mouseExited)
53
    public void mouseExited(MouseEvent e) {
54
        System.out.println("滑鼠離開MyPanel上了");
55
    }
56
    
57
    //滑鼠按下去(mousePressed)
58
    public void mousePressed(MouseEvent e) {
59
        System.out.println("滑鼠被按下了");
60
    }
61
62
    //滑鼠鬆開(mouseReleased)
63
    public void mouseReleased(MouseEvent e) {
64
        System.out.println("滑鼠被鬆開了");
65
    }
66
67
    //滑鼠拖拽(mouseDragged)
68
    public void mouseDragged(MouseEvent e) {
69
        System.out.println("滑鼠拖拽x="+e.getX()+"y="+e.getY());
70
    }
71
72
    //滑鼠移動(mouseMoved)
73
    public void mouseMoved(MouseEvent e) {
74
        System.out.println("滑鼠移動時X="+e.getX()+"Y="+e.getY());
75
    }
76
77
    //鍵輸入值(keyTyped),F(1-12)無響應
78
    public void keyTyped(KeyEvent e) {
79
        System.out.println("按下了"+e.getKeyChar()+"鍵");
80
    }
81
82
    //鍵按下(keyPressed)
83
    public void keyPressed(KeyEvent e) {
84
        System.out.println("按下了"+e.getKeyChar()+"鍵");
85
    }
86
87
    //鍵鬆開(keyReleased)
88
    public void keyReleased(KeyEvent e) {
89
        System.out.println("按下了"+e.getKeyChar()+"鍵");
90
    }
91
92
    //開啟視窗(windowOpened)
93
    public void windowOpened(WindowEvent e) {
94
        System.out.println("開啟視窗(windowOpened)");
95
    }
96
97
    //視窗關閉(windowClosing)
98
    public void windowClosing(WindowEvent e) {
99
        System.out.println("視窗關閉(windowClosing)");
100
    }
101
102
    //視窗關閉(windowClosed)
103
    public void windowClosed(WindowEvent e) {
104
        System.out.println("視窗關閉(windowClosed)");
105
    }
106
107
    //視窗最小化(windowIconified)
108
    public void windowIconified(WindowEvent e) {
109
        System.out.println("視窗最小化(windowIconified)");
110
    }
111
112
    //恢復視窗(windowDeiconified)
113
    public void windowDeiconified(WindowEvent e) {
114
        System.out.println("恢復視窗(windowDeiconified)");
115
    }
116
117
    //啟用視窗,使用視窗(windowActivated)
118
    public void windowActivated(WindowEvent e) {
119
        System.out.println("啟用視窗(windowActivated)");
120
    }
121
122
    //視窗停用,切換視窗(windowDeactivated)
123
    public void windowDeactivated(WindowEvent e) {
124
        System.out.println("視窗停用(windowDeactivated)");
125
    }
126
}

     





來自為知筆記(Wiz)