GUI编程笔记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);
    }
}
时间: 2024-08-02 02:48:39

GUI编程笔记05:GUI事件监听机制原理和举例说明的相关文章

GUI编程(五)-----事件监听

事件监听器主要包含:动作事件监听器.鼠标事件监听器和键盘事件监听器三种. 动作监听器 代码如下: 1 public static void main(String[] args) { 2 JFrame frame = new JFrame("窗体"); 3 JButton button = new JButton("点我啊"); 4 frame.add(button); 5 //给按钮添加动作监听器 动作时间监听器对于鼠标点击以及空格键都会起作用的. 6 butto

4.JAVA之GUI编程事件监听机制

事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件.(如:鼠标单击事件) 监听器:将可以触发某一事件的动作(不止一个动作)都已经封装到了监听器中. 以上三者,在java中都已经定义好了,直接获取其对象来用就可以了. 我们要做的事情是,就是对产生的动作进行处理. 图解事件监听机制: 4.JAVA之GUI编程事件监听机制,布布扣,bubuko.com

.NET事件监听机制的局限与扩展

.NET中把“事件”看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的差异. // C#someButton.Click += OnSomeButtonClick; // JavasomeButton.addActionListener( new ActionListener(){ public void actionPerformed(){ ... } }); 在我们的软件中就大量使用事件来对监听者与发布者解耦,但也遇到了一些局限,在这

Java中的事件监听机制

鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动作发生在哪个组件上,那么该组件就是事件源对象 2.事件监听方法: addMouseListener(MouseListener ml) ;该方法主要用来捕获鼠标的释放,按下,点击,进入和离开的动作:捕获到相应的动作后,交由事件处理类(实现MouseListener接口)进行处理. addAction

关于事件监听机制的总结(Listener和Adapter)

记得以前看过事件监听机制背后也是有一种设计模式的.(设计模式的名字记不清了,只记得背后实现的数据结构是数组.) 附上事件监听机制的分析图: 一个事件源可以承载多个事件(只要这个事件源支持这个事件就可以,男人就不支持生孩子的事件)  事件和监听器有对应关系的. 下面用awt中的标准图形化界面分析: 接口WindowListener 中有一个实现类WindowAdapter类.适配器类. EventListener.java 下面是所有超级接口EventListener.java的源代码   其实就

Spring架构揭秘-事件监听机制

一.事件监听机制概述 二.事件监听机制结构 三.Spring监听机制架构 Spring的Application拥有发布事件并且注册事件监听器的能力,拥有一套完整的事件发布和监听机制.在Java中,通过java.util. EventObject来描述事件,通过java.util. EventListener来描述事件监听器,在众多的框架和组件中,建立一套事件机制通常是基于这两个接口来进行扩展. 在一个事件体系中,有以下几个重要的概念. 1.事件源:事件对象的产生者,任何一个EventObject

Java 中的事件监听机制

看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. package com.shuyan.javatest.EventTest; import java.util.EventObject; public class DnsEvent extends EventObject { private String userData; private long

JAVA事件监听机制学习

//事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void main(String[] args) { Frame f = new Frame("Test"); Button b = new Button("Press Me!"); Monitor bh = new Monitor(); //实现了某种监听器接口的类的对象 b.add

观察者模式与事件监听机制

一.观察者模式 1.1 概述 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.它类似B/S架构模式,构建一个服务端,多个客户端显示.其实这个主题对象就像是一个信息源,当信息源的状态发送变化时,它会通知所有订阅者,使它们进行相应的处理.在百度百科中的例子是,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上. 1