JAVA入门到精通-第35讲-事件处理-坦克大战3

画出弧形:
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事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”。
 

    比如:当按下按钮时,就会在按钮触发一个“事件”,程序就会产生一个“事件对象”来表示这个事件,并把这个“事件对象”传递给“事件的监听者”,“事件的监听者”再根据“事件对象”的类型进行相应处理。
为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪一个“事件监听者”,我们必需先把“事件监听者”在“产生事件的对象”注册,这个操作也就是要告知“产生事件的对象”要把事件传递给它。

 

x
 
1
实例[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
    }
 




猜你喜欢

转载自www.cnblogs.com/xuxaut-558/p/10045724.html