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条目选中状态变化 把监听的结果在控制台输出
xxxxxxxxxxpackage 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就关闭窗口
xxxxxxxxxxpackage 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); }}