zoukankan      html  css  js  c++  java
  • 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),匿名内部类实现
  • 相关阅读:
    C# get folder's Md5 generated by file's and filename's md5. get dictionary md5
    C# DataTable to List<T> based on reflection.
    C# MySql Transaction Async
    C# read file to bytes,File.ReadAllFiles,File.Open(),BinaryReader
    C# get md5,renamed file and can not change file's md5
    C# copy source directory files with original folder to the destination path
    C# transfer local file to remote server based on File.Copy
    C# copy folder and files from source path to target path
    vue slot
    vue 全局配置键盘事件
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14735876.html
Copyright © 2011-2022 走看看