美文网首页
Java事件处理和内部类

Java事件处理和内部类

作者: 0843d07b95d5 | 来源:发表于2018-03-16 15:57 被阅读0次

事件处理过程

事件处理(网络上找的图片)

1.实现某种监听器接口的监听器类并将该类的对象添加到事件源中
2.外部动作产生事件
3.事件源产生事件对象(所谓事件源就是产生事件对象的源,比如:按钮)
4.事件监听对象接收事件对象激活事件处理器并处理

事件处理基础知识

1.事件源(event source)
事件源是一个能够注册监听器对象并发送事件对象的对象。例如按钮或者滚动条就是事件源。

2.事件
事件一般是用户在界面上的一个操作,当一个事件发生时,该事件用一个事件对象来表示,事件对象有对应的事件类。

3.事件类型和事件对象
不同的事件类描述不同类型的用户动作,不同的事件源可以产生不同类别的事件。例如,按钮可以发送ActionEvent对象,而窗口可以发送WindowEvent对象。在Java中,所有的事件对象都最终派生于java.util.EventObject类。

4.事件监听器(event listener)和事件监听适配器(Adapter)
监听器对象是一个实现了特定监听器接口(listener interface)的类的实例。事件监听器类(监听器对象所属的类)必须实现事件监听器接口或继承事件监听器适配器类。事件监听器接口定义了处理事件必须实现的方法。适配器(Adapter)是跟监听器一一对应的类。它实现了对应监听器中的所有方法,但都是空方法。注意:适配器是一个抽象类(abstract class)而该类中的所有方法已经被实现(虽然是空的)所以在继承适配器只需要重写需要的方法,而不用实现每个方法。因此减少编程的工作量。

5.事件监听处理器
处理事件的方法被称为事件处理器,即事件监听器接口定义,并在事件监听器类中实现的方法。

6.注册事件监听器
为了能够让事件监听器检查某个组件(事件源)是否发生了某些事件,并且在发生时激活事件处理器进行相应的处理,必须在事件源上注册事件监听器。这是通过使用事件源组件的以下方法来完成的:addXxxListener(事件监听器对象)Xxx对应相应的事件类。

5.再论事件和监听器
每一类事件有一个相应的事件监听器接口,该接口定义了接收和处理事件的一种以上的抽象方法。实现该接口的类,就是监听器类。其对象可作为监听器对象向相应的组件注册。实现该接口的抽象类且方法为空的类为适配器类。适配器(Adapter)必须被继承,并且根据需要重写处理事件的方法。
事件的类名通常为:XxxEvent
对应的事件监听器接口名通常为:XxxListener
对应的事件监听适配器名通常为: XxxAdapter

例子:
import java.awt.*;
import java.awt.event.*;

public class TestActionEvent {
    public static void main(String[] args) {
        new MyFrame();
    }
}

class MyFrame extends Frame {
    MyFrame(){
        setLayout(null);
        setBounds(300, 300, 400, 300);

        Button btn = new Button("click");
        btn.setSize(200, 90);
        add(btn);//添加按钮

        Monitor mon = new Monitor();//定义监听器对象
        btn.addActionListener(mon);//向button中注册监听器

        addWindowListener(new WAdapter());//添加窗口监听器
        
        pack();
        setVisible(true);

    }
}

class Monitor implements ActionListener {// 事件监听器类继承事件监听器接口
    public void actionPerformed(ActionEvent e){//事件处理器方法
        Button btn = (Button)e.getSource();
        btn.setLabel("button事件处理");
    }
}

class WAdapter extends WindowAdapter {//窗体适配器继承适配器抽象类
    public void windowClosing(WindowEvent e) {//事件处理
        MyFrame my = (MyFrame)e.getSource();
        my.setVisible(false);
        System.exit(0);
    }
}

内部类

从名字上可以知道内部类就是在类里面声明类
我们将按钮的监听器类声明在了MyFrame类里面,MyFrame类被称为包装类

例子:
import java.awt.*;
import java.awt.event.*;

public class TestActionEvent {
    public static void main(String[] args) {
        new MyFrame();
    }
}

class MyFrame extends Frame {

    Button btn = new Button("click");
    

    MyFrame(){
        setLayout(null);
        setBounds(300, 300, 400, 300);
        this.btn.setSize(100,90);
        add(this.btn);//添加按钮

        Monitor mon = new Monitor();//定义监听器对象
        this.btn.addActionListener(mon);//向button中注册监听器

        addWindowListener(new WAdapter());//添加窗口监听器
        
        pack();
        setVisible(true);

    }

    private class Monitor implements ActionListener {// 事件监听器类继承事件监听器接口
        public void actionPerformed(ActionEvent e){//事件处理器方法
            //Button btn = (Button)e.getSource();
            btn.setLabel("button事件处理");
        }
    }
    
}
/*
class Monitor implements ActionListener {// 事件监听器类继承事件监听器接口
    public void actionPerformed(ActionEvent e){//事件处理器方法
        Button btn = (Button)e.getSource();
        btn.setLabel("button事件处理");
    }
}
*/

class WAdapter extends WindowAdapter {//窗体适配器继承适配器抽象类
    public void windowClosing(WindowEvent e) {//事件处理
        MyFrame my = (MyFrame)e.getSource();
        my.setVisible(false);
        System.exit(0);
    }
}

内部类的特点:

1.可以方便的访问包装类的成员
2.可以清楚的组织逻辑,防止不应该访问内部类的类访问。
对于该Monitor类的事件处理器可能只适用于该button的事件处理,对于其他类的button可能不适用。

相关文章

  • Java事件处理和内部类

    事件处理过程 1.实现某种监听器接口的监听器类并将该类的对象添加到事件源中2.外部动作产生事件3.事件源产生事件对...

  • 事件关联

    JAVA里事件关联采用的监听机制事件开发步骤: 代码演示 内部类中访问外部类对象:外部类名.this.内部类能访问...

  • 热修复原理拆解个人笔记(一)

    源于sophix文档: 内部类/外部类java编译器对内部类的处理 匿名内部类匿名内部类 类加载类加载时间 fin...

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • 在Alibaba广受喜爱的“Java突击宝典”简直太牛了

    0-1年:夯实基础 1.Java基础(Java异常分类及处理+Java反射+Java注解+Java内部类+Java...

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

  • Java基础8:深入理解内部类

    本文主要介绍了Java内部类的基本原理,使用方法和各种细节。 有关内部类实现回调,事件驱动和委托机制的文章将在后面...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • 面试官:谈谈你对Java内部类的理解?

    java中的内部类可以分为普通内部类(成员内部类),静态内部类,局部内部类和匿名内部类。 成员内部类 成员内部类就...

网友评论

      本文标题:Java事件处理和内部类

      本文链接:https://www.haomeiwen.com/subject/ltllqftx.html