JAVA入門到精通-第35講-事件處理-坦克大戰3
阿新 • • 發佈:2018-11-30
畫出弧形:
g.drawArc:
前兩個引數:代表中心點,後面代表寬,高,後面是弧度的大小;
50代表弧度,後面方向;
SWING程式設計三個部分:
(1)元件和佈局管理器;
(2)繪圖技術;
(3)事件處理機制;
滑鼠,鍵盤按下的某個按鈕或者移動等都是事件;
JAVA認為,訊息是一種事件物件;事件監聽者也是一個類;
事件監聽者中有函式或者方法專門去處理事件;
import java.awt.Event.*;
需要對事件
進行處理,把Event包帶進去;
Border佈局
中間是 預設的;
點選按鈕做相應的 反映:
事件源:jb1/jb2
事件監聽者:Demo9_3這個類監聽
事件處理方法:actionPerformed(ActionEvent e)
如何監聽?註冊監聽:
事件源在前提供一個方法,addActionListener
在事件源的身上新增一個監聽方法
//區分事件的處理方法
setActionCommand("黑色");
如果jb1被點選了,“黑色”的值會被傳出去
ActionEvent e 事件物件
如何拿到顏色值呢? 一旦一個類在這個事件上監聽了, 這個事件就會自動傳遞給他; 這個動作也可以被多個事件監聽者進行監聽; 可以被Cat監聽: 一個普通的類也可以被監聽; 一個事件源被多個類監聽; this的具體例項:demo9_3,建構函式的例項; demo9_3是事件監聽者;
事件處理方法: actionPerformed 事件物件: ActionEvent arg0
通過鍵盤進行事件監聽:
需要實現介面implements,這樣mp才有監聽的能力; 給MyPanel新增方法;雙擊會出現三個函式: KeyPressed -鍵被按下 KeyReleased-鍵被釋放 KeyTyped-鍵的值被輸出 (char)e.getKeyCode( ); VK_DOWNN向下的鍵 圓要動起來,需要重繪重新整理,呼叫repaint()函式; this.repaint( ); 上下左右了: 可以跑起來了; 變快的話,步長快速改變就行 y+=10;
--------------------------------------------------------------------- java事件處理機制
如何通過鍵盤或滑鼠的控制使Java程式中的功能有響應?
java事件處理機制--初步介紹
java事件處理是採取“委派事件模型”。所謂“委派事件模型”是指當事件發生時,產生事件的物件(即事件源),會把此“資訊”傳遞給“事件的監聽者”處理的一種方式,而這裡所說的“資訊”實際上就是java.awt.event事件類庫裡某個類所建立的物件,我們暫時把它稱為“事件的物件”。
比如:當按下按鈕時,就會在按鈕觸發一個“事件”,程式就會產生一個“事件物件”來表示這個事件,並把這個“事件物件”傳遞給“事件的監聽者”,“事件的監聽者”再根據“事件物件”的型別進行相應處理。
為了讓“產生事件的物件”[比如按鈕]知道要把事件傳遞給哪一個“事件監聽者”,我們必需先把“事件監聽者”在“產生事件的物件”註冊,這個操作也就是要告知“產生事件的物件”要把事件傳遞給它。
1
來自為知筆記(Wiz)
事件處理方法:actionPerformed(ActionEvent e)
如何監聽?註冊監聽:
ActionEvent e 事件物件
如何拿到顏色值呢? 一旦一個類在這個事件上監聽了, 這個事件就會自動傳遞給他; 這個動作也可以被多個事件監聽者進行監聽; 可以被Cat監聽: 一個普通的類也可以被監聽; 一個事件源被多個類監聽; this的具體例項:demo9_3,建構函式的例項; demo9_3是事件監聽者;
事件處理方法: actionPerformed 事件物件: ActionEvent arg0
通過鍵盤進行事件監聽:
需要實現介面implements,這樣mp才有監聽的能力; 給MyPanel新增方法;雙擊會出現三個函式: KeyPressed -鍵被按下 KeyReleased-鍵被釋放 KeyTyped-鍵的值被輸出 (char)e.getKeyCode( ); VK_DOWNN向下的鍵 圓要動起來,需要重繪重新整理,呼叫repaint()函式; this.repaint( ); 上下左右了: 可以跑起來了; 變快的話,步長快速改變就行 y+=10;
--------------------------------------------------------------------- java事件處理機制
如何通過鍵盤或滑鼠的控制使Java程式中的功能有響應?
java事件處理機制--初步介紹
java事件處理是採取“委派事件模型”。所謂“委派事件模型”是指當事件發生時,產生事件的物件(即事件源),會把此“資訊”傳遞給“事件的監聽者”處理的一種方式,而這裡所說的“資訊”實際上就是java.awt.event事件類庫裡某個類所建立的物件,我們暫時把它稱為“事件的物件”。
比如:當按下按鈕時,就會在按鈕觸發一個“事件”,程式就會產生一個“事件物件”來表示這個事件,並把這個“事件物件”傳遞給“事件的監聽者”,“事件的監聽者”再根據“事件物件”的型別進行相應處理。
為了讓“產生事件的物件”[比如按鈕]知道要把事件傳遞給哪一個“事件監聽者”,我們必需先把“事件監聽者”在“產生事件的物件”註冊,這個操作也就是要告知“產生事件的物件”要把事件傳遞給它。
x1
例項[Window016.java]
2
/**
3
* 功能:事件處理機制
4
*/
5
import java.awt.*;
6
import javax.swing.*;
7
import java.awt.event.*;
8
public class Window016 extends JFrame implements ActionListener{
9
//定義元件
10
JPanel mp=null;
11
JButton jb1,jb2;
12
public static void main(String[] args) {
13
Window016 win=new Window016();
14
}
15
//建構函式
16
public Window016(){
17
//建立元件
18
mp=new JPanel();
19
jb1=new JButton("黑色");
20
jb2=new JButton("紅色");
21
//設定佈局管理器
22
23
//加入元件
24
mp.setBackground(Color.black);
25
this.add(mp);
26
this.add(jb1,BorderLayout.NORTH);
27
this.add(jb2,BorderLayout.SOUTH);
28
29
//貓類在監聽
30
Cat mycat1=new Cat();
31
jb1.addActionListener(mycat1);
32
jb2.addActionListener(mycat1);
33
//註冊監聽
34
jb1.addActionListener(this);
35
jb2.addActionListener(this);
36
37
//指定action命令
38
jb1.setActionCommand("黑色");
39
jb2.setActionCommand("紅色");
40
41
//JFrame窗體設定
42
this.setTitle("事件處理機制");
43
this.setSize(400, 300);
44
this.setLocationRelativeTo(null);
45
this.setVisible(true);
46
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
47
}
48
49
//對事件處理的方法
50
public void actionPerformed(ActionEvent e) {
51
//判斷是哪個按鈕被點選
52
if(e.getActionCommand().equals("黑色")){
53
System.out.println("點選了黑色按鈕");
54
mp.setBackground(Color.BLACK);
55
}else if(e.getActionCommand().equals("紅色")){
56
System.out.println("點選了紅色按鈕");
57
mp.setBackground(Color.RED);
58
}else{
59
System.out.println("不知道");
60
}
61
}
62
}
63
64
class Cat implements ActionListener{
65
public void actionPerformed(ActionEvent arg0) {
66
if(arg0.getActionCommand().equals("黑色")){
67
System.out.println("Cat也知道你按下了黑色按鈕");
68
}else if(arg0.getActionCommand().equals("紅色")){
69
System.out.println("Cat也知道你按下了紅色按鈕");
70
}else {
71
System.out.println("Cat也不知道");
72
}
73
}
74
}
------------------------------------------------------------------------------
1
例項[Window017.java]
2
/**
3
* 功能:加深對事件處理機制的理解
4
* 1、通過上下左右鍵,來控制一個小球的移動。
5
*/
6
import java.awt.*;
7
import java.awt.event.*;
8
import javax.swing.*;
9
public class Window017 extends JFrame {
10
//設定元件
11
MyPanels mp=null;
12
public static void main(String[] args) {
13
Window017 win=new Window017();
14
}
15
//建構函式
16
public Window017(){
17
//構建元件
18
mp=new MyPanels();
19
20
//監聽
21
this.addKeyListener(mp);
22
23
//加入元件
24
this.add(mp);
25
//設定窗體
26
this.setTitle("鍵盤事件監聽");
27
this.setSize(400, 300);
28
this.setLocationRelativeTo(null);
29
this.setVisible(true);
30
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
31
}
32
}
33
//定義自己的面板
34
class MyPanels extends JPanel implements KeyListener{
35
int x=10,y=10;
36
public void paint(Graphics g){
37
super.paint(g);
38
g.fillOval(x, y, 10, 10);
39
}
40
41
public void keyPressed(KeyEvent e) {//keyPressed代表鍵被按下
42
System.out.println("被按下"+((char)e.getKeyCode()));
43
if(e.getKeyCode()==KeyEvent.VK_DOWN){
44
System.out.println("向下");
45
y++;
46
}else if(e.getKeyCode()==KeyEvent.VK_UP){
47
System.out.println("向上");
48
y--;
49
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
50
System.out.println("向左");
51
x--;
52
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
53
System.out.println("向右");
54
x++;
55
}
56
57
//呼叫repaint()函式,來重繪介面
58
this.repaint();
59
}
60
61
public void keyReleased(KeyEvent e) {//keyReleased代表鍵被彈起
62
63
}
64
65
public void keyTyped(KeyEvent e) {//keyTyped代表具體的值被輸出
66
67
}
來自為知筆記(Wiz)