awt_常见事件和常见监听器
事件监听器必须实现事件监听器接口,AWT提供了大量的事件监听器接口用于实现不同类型的事件监听器,用于监听不同类型的事件。AWT中提供了丰富的事件类,用于封装不同组件上所发生的特定操作, AWT的事件类都是AWTEvent类的子类,AWTEvent是EventObject的子类
AWT把事件分为了两大类:
1、低级事件:这类事件是基于某个特定动作的事件。比如进入。点击、拖放等动作的鼠标事件,再比如得到焦点和失去焦点等焦点事件。例如如下
事件 | 触发时机 |
---|---|
ComponentEvent | 组件事件,当组件尺寸发生变化、位置发生移动、显示或隐藏状态发生改变时触发该事件 |
ContainerEvent | 容器事件,当容器里发生添加组件、删除组件时触发该事件 |
WindowEvent | 窗口事件,当窗口状态发生改变(如打开、关闭。最大化、最小化)时触发该事件 |
FocusEvent | 焦点事件,当组件得到焦点或失去焦点时触发该事件 |
KeyEvent | 键盘事件,当按键被按下、松开、单击时触发该事件 |
MouseEvent | 鼠标事件,当进行单击、按下、松开、移动鼠标等动作时触发该事件 |
PaintEvent | 组件绘制事件,该事件是一个特殊的事件类型,当GUI组件调用update/paint方法来呈现自身时触发该事件 |
2、高级事件:这类事件并不会基于某个特定动作,而是根据功能含义定义的事件。例如如下
事件 | 触发时机 |
---|---|
ActionEvent | 动作事件,当按钮、菜单项被单击,在TextField中按Enter键时触发 |
AjustmentEvent | 调节事件,在滑动条上移动滑块以调节数值时触发该事件 |
ItemEvent | 选项事件,当用户选中某项,或取消选中某项时触发该事件 |
TextEvent | 文本事件,当文本框、文本域里的文本发生改变时触发该事件 |
事件监听器:不同的事件需要使用不同的监听器监听,不同的监听器需要实现不同的监听器接口,当指定事件发生后,事件监听器就会调用所包含的事件处理器(实例方法)来处理事件。例如如下
事件类别 | 描述信息 | 监听器接口名 |
---|---|---|
ActionEvent | 激活组件 | ActionListener |
ItemEvent | 选择了某些项目 | ItemListener |
MouseEvent | 鼠标移动 | MouseMotionListener |
MouseEvent | 鼠标点击等 | MouseListener |
KeyEvent | 键盘输入 | KeyListener |
FocusEvent | 组件收到或失去焦点 | FocusListener |
AdjustmentEvent | 移动了滚动条等组件 | AdjustmentListener |
ComponentEvent | 对象移动缩放显示隐藏等 | ComponentListener |
WindowEvent | 窗口收到窗口级事件 | WindowListener |
ContainerEvent | 容器中增加删除了组件 | ContainerListener |
TextEvent | 文本字段或文本区发生变化 | TextListener |
awt的常见事件和常见监听器_练习1
案例 1、通过ContainerListener监听Frame容器添加组件 2、通过TextListener监听TextFile文本框内容变化 3、通过ItemListener监听Choice条目选中状态变化 把监听的结果在控制台输出
xxxxxxxxxx
package ch29;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class a_5_3awt_常见事件和常见监听器2 {
public static void main(String[] args) {
//创建Frame窗口对象
Frame frame=new Frame("测试监听器");
//创建文本框组件(事件源)
TextField tf=new TextField();
//创建下拉选择框组件(事件源)
Choice names=new Choice();
names.add("张三");//往下拉选择框里面添加三个条目
names.add("李四");
names.add("王五");
//给文本添加TextListener监听器,监听内容变化
tf.addTextListener(new TextListener() {//addTextListener需要的参数是监听器对象,我们使用匿名内部类的方式来创建监听器对象
public void textValueChanged(TextEvent e) {
String text = tf.getText();//当文本框的内容发生变化,就把文本框的内容拿到下面那行输出
System.out.println("当前文本的内容为:"+text);
}
});
//给下拉选择框添加ItemListener监听器,监听条目选项的变化
names.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Object item = e.getItem();
System.out.println("当前选中的条目为:"+item);
}
});
//给frame注册ContainerListener监听器,监听容器组件的添加
frame.addContainerListener(new ContainerListener() {
public void componentAdded(ContainerEvent e) {//添加方法
Component child = e.getChild();
System.out.println("frame中添加了:"+child);
}
public void componentRemoved(ContainerEvent e) {//移除方法
}
});
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
//添加到frame中
Box hBox=Box.createHorizontalBox();//水平的BOX容器
hBox.add(names);//把names放到BOX里面
hBox.add(tf);//把tf放到BOX里面
frame.add(hBox);//把BOX容器放到Frame容器里面
//设置Frame最佳大小并可见
frame.pack();
frame.setVisible(true);
}
//为什么按钮里面的文字出现乱码:idea编码是UTF-8,生成的按钮是由当前win11操作系统创建的,而当前系统的默认编码是中文GBK编码,不一致就会出现乱码
//解决:让编码和解码一致
//具体解决:在idea软件的上方中间靠右一些有一个绿色锤子图标,点击锤子图标右边的输入框,点击下拉的Edit Configurations...,点击弹出来的
//选项卡的Modify options绿色字体,找到Add VM options并勾选,将'-Dfile.encoding=gbk'输入到刚才Modify options蓝色字体的
//下方的三条输入框中的最上面那条输入框里面
}
awt的常见事件和常见监听器_练习2
需求:给Frame设置WindowListener监听器,监听用户点击x的动作,当点击x就关闭窗口
xxxxxxxxxx
package ch29;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class a_5_4awt_常见事件和常见监听器3 {
public static void main(String[] args) {
Frame frame=new Frame("测试WindowListener");
frame.setBounds(200,200,500,300);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
frame.setVisible(true);
}
}