事件处理机制
事件处理机制:当某个组件上发生某些操作时,会自动出发一些代码的执行
1.事件: 对鼠标键盘以及其他输入设备的各种操作或者一个活动的发生称为事件。当有事件发生时GUI会把事件封装在对象中如果需要知道事件的某些信息,就可以通过这个对象来获取。
2.事件源:鼠标、键盘以及其他输入设备操作的组件称为事件源。一个事件源可以有多个事件
3.事件处理是指一旦事情发生时需要执行的操作。多个组件需要响应同一个事件,可以注册同一个事件监听器。事件处理方法可以由本类实现,也可由其他类实现。
4.监听器:当事件源上发生某个事件时,事件监听器就会对其经行处理。
5.监听器的注册:将事件监听器绑定在事件源上,当事件源上发生事件时,事件监听器就会执行代码。
具体实现步骤如下:
- 1.创建事件源组件对象
- 2.自定义类,实现XXXListener接口,重写方法
- 3.创建事件监听器对象(自定义类对象)
- 4.调用事件源组件对象的addXXXListener方法完成注册监听
下面的代码是一个事件处理的例子
public class Listenerdome {
Frame frame=new Frame("事件测试处理"); //创建窗口
TextField filed=new TextField(30); //创建文本框
Button ok=new Button("确定"); //创建按钮
public void init() {
//组装试图
//监听器
MyListener mylistener=new MyListener();
//组装监听器
ok.addActionListener(mylistener);
frame.add(filed,BorderLayout.NORTH);
frame.add(ok);
frame.pack();
frame.setVisible(true);
}
private class MyListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e)
{
filed.setText("Hello World");
}
}
public static void main(String[] args) {
new Listenerdome().init();
}
}
运行结果如图:
当点击确定是会出现:
可以监听鼠标点击某个按钮,然后做出相应处理,也可以监听文本域中的内容:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
import javax.swing.text.TextAction;
public class Listenerdome2 {
public static void main(String[] args) {
Frame frame=new Frame();
TextField tf=new TextField(30); //创建宽度为30的文本框
Choice names=new Choice(); //创建下拉选项条
names.add("1");
names.add("2");
names.add("3");
//给文本框创建TextListener,监听内容变化
tf.addActionListener(new TextAction(null) {
@Override
public void actionPerformed(ActionEvent e) {
String text=tf.getText(); //将文本的内容付给text
System.out.println("输入内容为:"+text);
}
});
//给文本框创建ItemListener,监听内容变化
names.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Object item=e.getItem();
System.out.println("当前选中的条目:"+item);
}
});
//给文本框创建ContainerListener,监听内容变化
frame.addContainerListener(new ContainerListener() {
@Override
public void componentRemoved(ContainerEvent e) {
Component child=e.getComponent();
System.out.println("frame中添加的组件是:"+child);
}
@Override
public void componentAdded(ContainerEvent e) {
// TODO Auto-generated method stub
}
});
Box box=Box.createHorizontalBox(); //创建水平box容器
//组件容器
box.add(names);
box.add(tf);
frame.add(box);
//设置窗口属性
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
这是一个监听文本域的示例: