java 图形化小工具Abstract Window Toolit 事件处理

事件处理设计到了三个对象:
  • EventSource(事件源):事件发生的场所,通常就是各个组件,例如按钮、窗口,菜单等。
  • Event (事件封装了GUI组件上发生的特定事情(通常就是一次用户操作)。如果程序需要获得GUI组件上所发生事件的相关信息,都通过Event象来取得。
  • EventListener(事件监昕器):负责监听事件源所发生的事件,并对各种事件做出响应处理

3,事件的分类:

事件分为两大类,分别为低级事件和高级事件:

1,低级事件:

低级事件是指基于特定动作的事件,比如进入、点击、拖放等动作的鼠标事件,组件得到焦点、失去焦点时触发焦点事件
  • ComponentEvent: 组件事件,当组件尺寸发生变化、位置发生移动、显示 隐藏状态发生改变的时候触发该事件。
  • ContainerEvent: 容器事件,当容器里发生添加组件、删除组件时触发该事件。
  • WindowEvent: 窗口事件,当窗口状态发生改变(如打开、关闭、最大化、最小化)时触发该事件
  • FocusEvent: 焦点事件,当组件得到焦点或失去焦点时触发该事件
  • KeyEvent: 键盘事件,当按键被按下、松开、单击时触发该事
  • MouseEvent: 鼠标事件,当进行单击、按下、松开、移动鼠标等动作时触发该事件
  • PaintEvent: 组件绘制事件,该事件是个特殊的事件类型,GUI组件调update/paint方法来呈现自身时触发该事件,该事件并非专用于事件处理模型
 

2,高级事件:

高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发该事件的类,比如,在TextField中按Enter会触发ActionEvent件,在滑动条上移动滑块会触发AdjustmentEvent事件,选中列表的某一项会触发ItemEvent事件。
  • ActionEvent:动作事件,当按钮、菜单项被单击,在TextField中按 Enter 键时触发该事件。
  • AdjustmentEvent: 调节事件,在滑动条上移动滑块以调节数值时触发该事件。
  • ItemEvent: 选项事件,当用户选中某项或取消选中某项时触发该事件
  • TextEvent: 文本事件,当文本框、文本域里的文本发生改变时触发该事件。

3,AWT事件继承关系图(粗线圈出来的是常用的):

4,事件类型和监听器表:

 

5、窗口事件:

通过添加窗口事件来关闭窗口:WindowListener 监听器 windowClosing 方法
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

/**
 * @ClassName WindowCloseTest
 * @projectName: object1
 * @author: Zhangmingda
 * @description: XXX
 * date: 2021/5/6.
 */
public class WindowCloseTest {
    public static void main(String[] args) {
        Frame frame = new Frame("窗口监听器测试");
        frame.setBounds(400,300,300,300);
        WindowListener windowListener = new WindowListener() {
            @Override
            public void windowOpened(WindowEvent windowEvent) {
                System.out.println("窗口被打开");
            }

            @Override
            public void windowClosing(WindowEvent windowEvent) {
                System.out.println("窗口关闭中");
                System.exit(0);
            }

            @Override
            public void windowClosed(WindowEvent windowEvent) {
                System.out.println("窗口已关闭");
            }

            @Override
            public void windowIconified(WindowEvent windowEvent) {
                System.out.println("窗口最小化了");
            }

            @Override
            public void windowDeiconified(WindowEvent windowEvent) {
                System.out.println("窗口已恢复");
            }

            @Override
            public void windowActivated(WindowEvent windowEvent) {
                System.out.println("窗口获得焦点");
            }

            @Override
            public void windowDeactivated(WindowEvent windowEvent) {
                System.out.println("窗口失去焦点");
            }
        };
        frame.addWindowListener(windowListener);
        frame.setVisible(true);
    }
}

6、事件适配器:

向上面的代码,我们其实只需要用到windowClosing,但是现实是所有的方法都需要重写一遍,很麻烦。事件适配器是监听器接口的空实现,事件适配器实现了事件监听器所有接口,并为该接口里的每个方法都提供了实现,这种实现是一种空实现(方法体内没有任何代码的实现)。当需要创建监听器时,可以通过继承事件适配器,而不是监听器接口。因为事件适配器已经为监听器接口的每个方法提供了空实现,所以程序自己的监听器无须实现监听器接口里的每个方法,只需要重写自己感兴趣的方法,从而可以简化事件监听器的实现类代码。
事件适配器很简单,就是把监听器的Listener修改为Adapter:
比如上面代码修改之后是:

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class WindowCloseTest {
    public static void main(String[] args) {
        Frame frame = new Frame("测试关闭窗口");
        WindowListener windowListener = new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("正在关闭窗口");
                System.exit(0);
            }
        };
        frame.addWindowListener(windowListener);
        frame.setBounds(100, 100, 400, 400);
        frame.setVisible(true);
    }
}
 
事件适配器的常用的几种写法:
(1),用内部类的方式实现
(2),外部类实现
(3),当前类本身实现
(4),匿名内部类实现
原文地址:https://www.cnblogs.com/zhangmingda/p/14735876.html