JAVA入門到精通-第36講-事件監聽-坦克大戰4
阿新 • • 發佈:2018-11-30
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
來自為知筆記(Wiz)
一個類要實現監聽的基本步驟: a.實現相應的介面[KeyListener,MouseListener,ActionListener,WindowListener] b.把介面的處理方法根據需要重新編寫(override) c.在事件源註冊監聽 d.事件傳遞是靠事件物件
通過ActionEvent傳遞事件; 通過事件進行委派事件模型進行事件處理; 一個事件源可能會生成多個不同型別的事件: 繪圖的時候有Panel,Panel上有按鈕; JPanel上滑鼠可以點選,移動,也是一種事件; JAVA處理機制的內部實現;
拿到滑鼠的位置: getX getY
鍵盤監聽:KeyListener Press 和 Type有什麼區別 :F1鍵 對於TYPE是不會觸發的;
視窗的關閉,最大化,最小化事件監聽: 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)