1.1 Java事件模型的流程

GUI事件处理机制定义:当在某个组件上发生某些操作时,会自动触发一段代码的执行。

事件源(Event Source):操作发生的场所,通常就是各个组件,例如按钮、窗口、菜单等。

事件(Event):事件封装了GUI组件上发生的特定事情(通常是用户的一次操作)。如果需要知道该事件的详细信息,就可以通过Event对象来获取。

事件监听器(Event Listener):当在事件源上发生了某个事件,事件监听器就对这个事件进行处理。

注册监听 :把某个事件监听器(A)通过某个事件(B)绑定到某个事件源(C)上,当在事件源C上发生了事件B之后,那么事件监听器A的代码就会自动执行。

AWT事件处理流程图

事件处理机制实例

使用步骤

  1. 创建事件源组件对象;
  2. 自定义类,实现xxxListener接口,重写方法;
  3. 调用xxxListener()方法将事件监听器对象注册给普通组件(事件源)。
package Test;

import java.awt.*;
import java.awt.event.*;

public class AnLi1 {
    Frame frame = new Frame("文本框案例");
    TextField ta = new TextField(20);
    Button button = new Button("确定");

    public void init() {
        //组装视图

        frame.add(ta, BorderLayout.NORTH);
        frame.add(button);
        //注册监听
        button.addActionListener(new MyListener());
        //创建关闭监听
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        frame.pack();
        frame.setVisible(true);


    }

    public class MyListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            ta.setText("Hello World !");
        }
    }

    public static void main(String[] args) {
        new AnLi1().init();
    }
}

运行截图:

Hello World

事件适配器是监听器接口的空实现——事件适配器实现了监听器接口,并为该接口里的每一种方法都提供了实现,这种实现是一种空实现(方法体里没有任何代码的实现)。

1.2 事件和事件监听器

AWT 事件机制涉及三个成员:事件源、事件和事件监听器,事件源最容易创建,只要通过 new 来创建一个 AWT 组件,该组件就是事件源;事件是由系统自动产生的,无需程序员关心。所以,实现事件监听器是整个事件处理的核心。

AWT 事件分为两大类:低级事件和高级事件。

  1. 低级事件:是基于特定动作的事件。比如进入、点击、拖放等动作的鼠标事件,当窗口得到或者失去焦点时触发的动作。
  2. 高级动作:这类事件并不基于某个特定动作的,而是根据功能含义定义的事件。
事件触发时机
ActionEvent动作事件,当按钮、菜单项被点击,在TextField中按Enter时触发
AjustmentEvent调节事件,当滑动条上移动滑块以调节数值时触发该事件
ItemEvent选项事件,当用户选中某项,或取消选中某项时触发该事件。
TextEvent文本事件,当文本框、文本域里的文本发生改变时触发该事件

实例:

一个组件被多个监听器监听

package Test;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MultiListener {
    Frame frame = new Frame("监听器事件");
    TextArea ta = new TextArea(6, 20);
    Button b1 = new Button("按钮1");
    Button b2 = new Button("按钮2");

    public void init() {
        //创建FirstListener监听器实例
        ActionListener f1 = new FirstListener();
        //给b1按钮添加两个事件监听器
        b1.addActionListener(f1);
        b1.addActionListener(new SecondListener());
        //将f1监听器注册给b2按钮
        b2.addActionListener(f1);

        frame.add(ta);
        Panel panel = new Panel();
        panel.add(b1);
        panel.add(b2);
        frame.add(panel, BorderLayout.SOUTH);
        //给frame注册关闭监听器
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        frame.pack();
        frame.setVisible(true);
    }

    public class FirstListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            ta.append("第一个事件触发器被触发,事件源是" + actionEvent.getActionCommand() + "\n");
        }
    }

    public class SecondListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            ta.append("点击了“" + actionEvent.getActionCommand() + "”按钮\n");
        }
    }

    public static void main(String[] args) {
        new MultiListener().init();
    }

}

本文导出文档下载地址:Download

Last modification:November 23rd, 2020 at 06:29 pm
如果觉得我的文章对你有用,请随意赞赏