• GUI编程笔记(java)05:GUI事件监听机制原理和举例说明


    1.事件监听机制:
           A:事件源          事件发生的地方
           B:事件             就是要发生的事情
           C:事件处理       就是针对发生的事情做出的处理方案
           D:事件监听       就是把事件源和事件关联起来

    2.举例:人受伤事件。

    事件源:人(具体的对象)
             Person p1 = new Person("张三");
             Person p2 = new Person("李四");


    事件:受伤
        interface 受伤接口 {
            一拳();
            一脚();
         一板砖();
    }


    事件处理:
                 受伤处理类 implements 受伤接口 {
                 一拳(){ System.out.println("鼻子流血了,送到卫生间洗洗"); }
                 一脚(){ System.out.println("晕倒了,送到通风处"); }
              一板砖(){ System.out.println("头破血流,送到太平间"); }
    }


    事件监听:
         p1.注册监听(受伤接口)

    2.窗体关闭案例代码:

    这里事件源是:窗体

    事件:对窗体的处理

    事件处理:关闭窗体System.exit(0);

    事件监听:

    package cn.itcast_02;
    
    import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    
    public class FrameDemo {
        public static void main(String[] args) {
            // 创建窗体对象
            Frame f = new Frame("窗体关闭案例");
    
            // 设置窗体属性
            f.setBounds(400, 200, 400, 300);
    
            // 让窗体关闭
            //事件源
            //事件:对窗体的处理
            //事件处理:关闭窗口(System.exit(0));
            //事件监听
              f.addWindowListener(new WindowListener() {
                @Override
                public void windowOpened(WindowEvent e) {
                }
                
                @Override
                public void windowIconified(WindowEvent e) {
                }
                
                @Override
                public void windowDeiconified(WindowEvent e) {
                }
                
                @Override
                public void windowDeactivated(WindowEvent e) {
                }
                
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
                
                @Override
                public void windowClosed(WindowEvent e) {
                }
            
                @Override
                public void windowActivated(WindowEvent e) {
                }
            });
            
            
            // 设置窗体可见
            f.setVisible(true);
        }
    }

    这时候我们点击出现的窗口的关闭按钮就会关闭窗口;但是感觉上还是不够简化很多行代码是多余的,需要优化一下

    3.使用适配器进行简化上面的代码:

    (1)这里我们通过一个案例说明一下:适配器设计模式

    首先我们定义一个用户数据操作接口:UseDao

    package cn.itcast_03;
    
    /*
     * 针对用户操作的四种功能
     */
    public interface UserDao {
        public abstract void add();
    
        public abstract void delete();
    
        public abstract void update();
    
        public abstract void find();
    }

    接着我们定义一个适配器抽象类UseAdapter,实际上就是让UseAdapter实现UserDao接口的方法,但是所有的方法体为空,代码如下:

    package cn.itcast_03;
    
    public abstract class UserAdapter implements UserDao {
    
        @Override
        public void add() {
        }
    
        @Override
        public void delete() {
        }
    
        @Override
        public void update() {
        }
    
        @Override
        public void find() {
        }
    
    }

    现在我们知道实际上适配器帮我们做了缓冲,他帮忙实现所有的方法,但是方法体全是空,接下来我们在定义一个具体的方法实现类继承自这个抽象适配器类UserAdapter,这里我们定义UserDaoImpl2类,如下:

    package cn.itcast_03;
    
    public class UserDaoImpl2 extends UserAdapter {
        @Override
        public void add() {
            System.out.println("添加功能");
        }
    }

    接下来我们编写一个测试类UserDaoDemo类,如下:

    package cn.itcast_03;
    
    /*
     * 问题:
     *         接口(方法比较多) -- 实现类(仅仅使用一个,也得把其他的实现给提供了,哪怕是空实现)
     *         太麻烦了。
     * 解决方案:
     *         接口(方法比较多) -- 适配器类(实现接口,仅仅空实现) -- 实现类(用哪个重写哪个)
     */
    public class UserDaoDemo {
        public static void main(String[] args) {// 我没有说我们需要四种功能都实现啊。
            UserDao ud2 = new UserDaoImpl2();
            ud2.add();
        }
    }

    运行结果如下:

    (2)接下来使用适配器改进窗体关闭的代码:

    package cn.itcast_02;
    
    import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    
    public class FrameDemo {
        public static void main(String[] args) {
            // 创建窗体对象
            Frame f = new Frame("窗体关闭案例");
    
            // 设置窗体属性
            f.setBounds(400, 200, 400, 300);
    
            // 让窗体关闭
            //事件源
            //事件:对窗体的处理
            //事件处理:关闭窗口(System.exit(0));
            //事件监听
    
            //用适配器类改进
            f.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
            // 设置窗体可见
            f.setVisible(true);
        }
    }
  • 相关阅读:
    【原】ListView的BeginUpdate()和EndUpdate()的用处
    【原】Telerik radwindow 在IE10下偶尔报 unable to get value of the property 'toLowerCase' 的解决办法
    【原】从头学习设计模式(一)——单例模式
    【原】从头学习设计模式(二)——简单工厂模式
    【原】通过JS打开IE新tab(非Window)的解决方案
    【原】高效GTD云工具 ——高效管理你的时间
    【原】安装Win7和Ubuntu双系统后,Win7耳机无声音的解决办法
    【原】从头学习设计模式(三)——工厂方法模式
    【原】备忘:Oracle 中创建存储过程及调用测试一例
    【转】DBA的性格
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4758722.html
Copyright © 2020-2023  润新知