AWT——事件处理机制

事件处理:

定义:

        当某个组件上发生某些操作的时候,会自动地触发一段代码的执行

在GUI事件处理机制中涉及到4个重要的概念需要理解。

事件源:操作发生的场所,通常指某个组件,例如按钮、窗口等

事件:在事件源上发生的操作可以叫做事件,GUI会把事件都封装到一个Event对象中,如果需要知道该事件的详细信息,就可以通过Event对象来获取。

事件监听器:当某个事件源上发生了某个事件,事件监听器就会对这个事件进行处理。

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

使用步骤:

1.创建事件源组件对象;

2.自定义类,实现XxxListener接口,重新方法;

3.创建事件监听器对象(自定义类对象)

4.调用事件源组件对象的addXxxListener方法完成注册监听

package com.aynu.layout;

import java.awt.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class EventDemo {

        Frame frame =new Frame("这里测试事件处理");

        TextField tf=new TextField(30);
        //事件源
        Button ok =  new Button("确定");

        public void init(){
            //组装试图
            //监听器
            MyListener myListener =new MyListener();


            //注册监听
            ok.addActionListener(myListener);

            //把tf和ok放到Fram中
            frame.add(tf, BorderLayout.NORTH);
            frame.add(ok);

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

        }
        private class MyListener implements ActionListener{

            @Override
            public void actionPerformed(ActionEvent e) {
                tf.setText("Hello World Java");
            }
        }

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

AWT把事件分为了两大类:

        1.低级事件:这类事件是基于某个特定动作的事件。比如进入、点击、拖放等动作的鼠标事件。再比如得到焦点和失去焦点等焦点动作。

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

        2.高级事件:这类事件并不会基于某个特定动作,而是根据功能含义定义的事件。

事件触发时机
ActionEvent动作事件,当按钮、菜单项被单击,在TextField中按Enter键时触发
AjustmentEvent调节事件,在滑动条上移动滑块以调节数值时触发该事件。
ItemEvent选项事件,当用户选中某项,或取消选中某项时触发该事件
TextEvent文本事件,当文本框,文本域里的文本发生改变时触发该事件

常见事件和常见监听器

        通过ContainerListener监听Frame容器添加组件;

        通过TextListener监听TextFiled内容变化;

        通过ItermListener监听Choice条目选中状态变化;

package com.aynu.layout;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ListenerDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("这里测试监听器");


        //创建组件(事件源)
        TextField tf =new TextField(30);
        Choice names = new Choice();
        names.add("林青霞");
        names.add("张曼玉");
        names.add("王祖贤");

        //给文本域添加TextListener,监听内容的变化
        tf.addTextListener(new TextListener() {
            @Override
            public void textValueChanged(TextEvent e) {
                String text = tf.getText();
                System.out.println("当前文本框中的内容为:"+text);
            }
        });

        //给下拉选择框添加ItemListener,监听条目选项的变化
        names.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                Object item = e.getItem();
                System.out.println("当前选中的条目是:"+item);
            }
        });

        //给frame注册ContainerListener监听器,监听容器中组件的添加
        frame.addContainerListener(new ContainerListener() {
            @Override
            public void componentAdded(ContainerEvent e) {
                Component child = e.getChild();
                System.out.println("frame中添加了:"+child);
            }

            @Override
            public void componentRemoved(ContainerEvent e) {

            }
        });

        //添加到frame中
        Box hBox = Box.createHorizontalBox();
        hBox.add(names);
        hBox.add(tf);
        frame.add(hBox);

        //设置frame的最佳大小以及可见
        frame.pack();
        frame.setVisible(true);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iuiu啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值