一.事件处理基础
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方法能够准确的报告鼠标事件的鼠标按钮和键盘修饰符。