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

     
     
     








  • 相关阅读:
    OC基础5-NSString
    OC基础4
    OC基础3
    使用顺序表建立一个简单的学生管理系统
    二叉树的创建,遍历以及叶子结点数
    本地IP和主机IP
    双向链表的删除
    双向链表的查找及插入
    双向循环链表的建立
    单链表的合并
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10045726.html
Copyright © 2020-2023  润新知