• 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
        }
     




  • 相关阅读:
    time fly
    小论文初稿终于完成
    leetcode之Length of Last Word
    static关键字
    参数传递
    this关键字
    面向对象有三大特征
    空指针异常
    变量按数据类型分为
    构造方法
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10045724.html
Copyright © 2020-2023  润新知