事件处理

一.事件处理基础

1.事件,例如敲击键盘或按下鼠标这样的。如果有事件发生,每个应用程序将决定对他们做出怎样的响应。

2.AWT事件处理机制:
(1)监听器对象是一个实现了特定监听接口(listener interface)的类的实例。
(2)事件源是一个能够注册监听器对象并发送事件的对象。
(3)当事件发生时,事件源将事件对象传递给所有注册的监听器。
(4)监听器对象将利用事件对象中的信息决定如何对事件做出响应。

3.具体实现:
(1)为了实现ActionListener接口,监听器必须有一个被称为actionPerformed的方法,该方法接收一个ActionEvent对象参数。
(2)只要用户点击JButton按钮,JButton对象就会创建一个ActionEvent对象,然后调用listener.actionPerformed(event)传递事件对象。
(3)可以将多个监听器对象添加到一个像按钮这样的事件源当中,只要点击这个按钮,就会调用所有监听器的actionPerformed方法。

4.ActionListener接口不仅可以用于按钮事件,还可以用于:
(1)当采用鼠标双击的方式选择了列表框中的一个选项时。
(2) 当选择一个菜单项时。
(3)当在文本域中敲击ENTER键时。
(4)对于一个Timer组件来说,当达到指定事件间隔时。

5注意:
(1)在各种情况下,使用ActionListener接口的方式都是一样的:actionPerformed方法(ActionListener中的唯一方法)将接收一个ActionEvent类型的对象作为参数,这个事件对象包含了事件发生时的相关信息。
(2)任何实现了ActionListener接口的类对象都可以作为按钮监听器。
(3)动作可以是一个方法名或目标的属性。如果是属性,则执行它的设置方法。例如:动作text将变为调用setText方法。
(4)事件属性由一个或多个用逗号分隔的属性名组成。第一个属性从监听器方法的参数中读出,第二个属性由结果对象读出等。最后的结果将作为动作的参数。例如:属性source.text将变为调用getSource()和getText()方法。

package com.button;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ButtonTest {
    public static void nmain(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                ButtonFrame frame = new ButtonFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

class ButtonFrame extends JFrame{
    private JPanel buttonPanel;
    public static final int DEFAULT_WIDTH = 300;
    public static final int DEFAULT_HEIGHT = 200;

    public ButtonFrame() {
        JButton yellowButton = new JButton("Yellow");
        JButton blueButton = new JButton("Blue");
        JButton redButton = new JButton("Red");

        buttonPanel = new JPanel();

        buttonPanel.add(yellowButton);
        buttonPanel.add(blueButton);
        buttonPanel.add(redButton);

        add(buttonPanel);

        ColorAction yellowAction = new ColorAction(Color.YELLOW);
        ColorAction blueAction = new ColorAction(Color.BLUE);
        ColorAction redAction = new ColorAction(Color.RED);

        yellowButton.addActionListener(yellowAction);
        blueButton.addActionListener(blueAction);
        redButton.addActionListener(redAction);
    }

    private class ColorAction implements ActionListener{
        private Color backgroundColor;
        public ColorAction(Color c) {
            backgroundColor = c;
        }

        public void actionPerformed(ActionEvent event) {

            buttonPanel.setBackground(backgroundColor);
        }
    }
}

6.在Java中,实现一个接口的任何类都必须实现其中的所有方法。

二.动作

1.在AWT事件模型中激活一个命令:将所有事件连接到同一个监听器上。

2.Swing包提供了一种机制来封装命令,并将它们连接到多个事件源,这就是Action接口。一个动作是一个封装下列内容的对象:
(1)命令的说明(一个文本字符串和一个可选图标)
(2)执行命令所需要的参数。

3.可以在任何使用ActionListener对象的地方使用Action对象。

4.用同一个动作响应按钮,菜单项或击键的方式:
(1)实现一个扩展与AbstractAction类的类。多个相关的动作可以使用同一个类。
(2)构造一个动作类的对象。
(3)使用动作对象创建按钮或菜单项,构造器将从动作对象中读取标签文本和图标。
(4)为了能够通过击键触发动作,必须额外的执行几个步骤。首先,定位顶层窗口组件,例如,包含所有其他组件的面板。
(5)然后,得到顶层组件的WHEN_ANCESTOR_OF_FOCUS_COMPONENT输入映射,为需要的击键创建一个KeyStrike对象。创建一个描述动作字符串这样的动作键对象,将(击键,动作键)对添加到输入映射中。
(6)最后,得到顶层组件的动作映射,将(动作键,动作对象)添加到映射中。

三.鼠标事件

1.当用户点击鼠标按钮时,将会调用三个监听器方法:鼠标第一次被按下时调用mousePressed,鼠标被释放时调用mouseReleased,最后调用mouseClicked

2.用MouseEvent类对象作为参数,调用getX和getY方法可以获得鼠标按下时鼠标指针所在的X和Y的坐标。

3.要想区分单击,双击和三击,需要使用getClickCount方法。

4.getModifiersEX方法能够准确的报告鼠标事件的鼠标按钮和键盘修饰符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值