awt的事件处理机制
事件处理机制的定义:当在某个组件上发生某些操作的时候,会自动的触发-段代码的执行。
在GUI事件处理机制中涉及到4个重要的概念需要理解:
1、事件源(Event Source) :操作发生的场所。通常指某个组件,例如按钮、窗口等
2、事件(Event) : 在事件源上发生的操作可以叫做事件。GUI会把事件都封装到一个Event对象中,如果需要知道该事件的详细信息,就可以通过Event对象来获取
3、事件监听器(Event Listener):当在某个事件源上发生了某个事件,事件监听器就可以对这个事件进行处理
4、注册监听:把某个事件监听器(A)通过某个事件(B)绑定到某个事件源(C)上,当在事件源C上发生了事件B之后,那么事件监听器A的代码就会自动执行
awt的事件处理机制_练习
需求:通过事件处理机制,实现点击确定按钮就会有hello world出现
xxxxxxxxxx
package ch29;
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 a_5_1awt_事件处理机制_基本演示 {
Frame frame = new Frame();
TextField tf = new TextField(30);
//事件源是'确定'按钮
Button ok = new Button("确定");
public void init() {
//监听器-内部类的写法
MyListener myListener = new MyListener();
//注册监听-内部类的写法
ok.addActionListener(myListener);
////注册监听-匿名内部类的写法
/*ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tf.setText("hello world");
}
});*/
//把tf和ok放到Frame中
frame.add(tf, BorderLayout.NORTH);
frame.add(ok);//不写参数,默认把ok按钮放到frame容器的中间区域
//设置frame容器的最佳大小和可见
frame.pack();
frame.setVisible(true);
//给Frame设置WindowListener监听器,监听用户点击右上角X的动作,则关闭窗口
frame.addWindowListener(new WindowAdapter() {
//采用Java通过的适配器设计模式,我们只需要重写自己需要的方法,例如windowClosing方法,如下
public void windowClosing(WindowEvent e) {
System.exit(0);//原理:退出JVM虚拟机,即退出当前运行的Java程序
}
});
}
//定义内部类并让这个内部类来实现单击事件的接口ActionListener。注册监听
private class MyListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
tf.setText("hello world");//当单击的时候,就给tf文本域添加内容
}
}
//思考:如何使用匿名内部类来注册监听。首先把下面的MyListener内部类注释掉,再把21行和24行的监听器注释掉,最后再解开27行~32行的注释
//提示:如果事件监听器只跟一个事件源有关系的话,用匿名内部类的写法更方便。多个事件源都要用到这个事件监听器的话就还是建议使用内部类
public static void main(String[] args) {
new a_5_1awt_事件处理机制_基本演示().init();
}
//为什么按钮里面的文字出现乱码:idea编码是UTF-8,生成的按钮是由当前win11操作系统创建的,而当前系统的默认编码是中文GBK编码,不一致就会出现乱码
//解决:让编码和解码一致
//具体解决:在idea软件的上方中间靠右一些有一个绿色锤子图标,点击锤子图标右边的输入框,点击下拉的Edit Configurations...,点击弹出来的
//选项卡的Modify options绿色字体,找到Add VM options并勾选,将'-Dfile.encoding=gbk'输入到刚才Modify options蓝色字体的
//下方的三条输入框中的最上面那条输入框里面
}