1.1 Java事件模型的流程
GUI事件处理机制定义:当在某个组件上发生某些操作时,会自动触发一段代码的执行。
事件源(Event Source):操作发生的场所,通常就是各个组件,例如按钮、窗口、菜单等。
事件(Event):事件封装了GUI组件上发生的特定事情(通常是用户的一次操作)。如果需要知道该事件的详细信息,就可以通过Event对象来获取。
事件监听器(Event Listener):当在事件源上发生了某个事件,事件监听器就对这个事件进行处理。
注册监听 :把某个事件监听器(A)通过某个事件(B)绑定到某个事件源(C)上,当在事件源C上发生了事件B之后,那么事件监听器A的代码就会自动执行。
使用步骤:
- 创建事件源组件对象;
- 自定义类,实现xxxListener接口,重写方法;
- 调用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();
}
}
运行截图:
事件适配器是监听器接口的空实现——事件适配器实现了监听器接口,并为该接口里的每一种方法都提供了实现,这种实现是一种空实现(方法体里没有任何代码的实现)。
1.2 事件和事件监听器
AWT 事件机制涉及三个成员:事件源、事件和事件监听器,事件源最容易创建,只要通过 new 来创建一个 AWT 组件,该组件就是事件源;事件是由系统自动产生的,无需程序员关心。所以,实现事件监听器是整个事件处理的核心。
AWT 事件分为两大类:低级事件和高级事件。
- 低级事件:是基于特定动作的事件。比如进入、点击、拖放等动作的鼠标事件,当窗口得到或者失去焦点时触发的动作。
- 高级动作:这类事件并不基于某个特定动作的,而是根据功能含义定义的事件。
事件 | 触发时机 |
---|---|
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
滴!学生卡!打卡时间:下午10:19:12,请上车的乘客系好安全带~