事件源:一个产生事件的对象,当这个源对象的某些状态以某种方式发生变化时,就会发生某种类型的事件(一个事件源可能
会生成多个不同类型的事件)。如果某个对象(事件
监听者)
希望得到事件源产生的事件就需要在这个事件源上注册。
事件:承载事件源状态改变时的信息对象。用户与GUI组件进行交互时就会发生事件
比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中位置信息
事件监听器:实际上就是一个类,该类实现了某个事件监听器
接口,不同的事件监听器接口可以监听不同的事件一个类可以实现一个事件监听接口,也可以实现多个监听接口
补充:事件可以是鼠标事件、键盘事件、触摸事件或者鼠标移动事件等;事件源就是产生事件的组件,事件监听器就是事件源产生
事件时响应的接口
举个-
例子1:轿车剧烈震动时会自动报警(在
开启报警的情况下),在这里事件源就是车子,因为是车子产生震动的,所以事件是震动
(或者说是报警事件),事件监听器是报警器。
例子2:按钮被我按下了,在这里我是属于外界,是我促使干预了按钮才让按钮产生了click事件,所以按钮是事件源,click是
事件,下面哪个接口响应了就是事件监听器。监听器类一般系统都自带了,如果要用的话implements一下就行。
谁直接产生事件谁就是事件源,而对本次事件产生反应的就是事件监听器 。
事件处理步骤
① 创建事件监听器。
② 给事件源注册事件监听器。
③ 在事件
处理方法中
做自己要做的事。
自身类作为事件监听器
外部类作为事件监听器
匿名内部类作为事件监听器
内部类作为事件监听器
自身类作为事件监听器:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
*Java事件处理机制:自身类作为事件监听器
*/
class ThisClassEvent extends JFrame implements ActionListener{
JButton btn;
public ThisClassEvent(){
super("Java事件监听机制");
setLayout(new FlowLayout());
set
DefaultClose
Operation(JFrame.EXIT_ON_CLOSE);
btn=new JButton("点击");
btn.addActionListener(this);
getContentPane().add(btn);
setBounds(200,200,300,160);
setVisible(true);
}
/**************************************/
public void actionPerformed (ActionEvent e){
Container c=getContentPane();
c.setBackground(Color.red);
}
/**************************************/
public static void main(String args[]){
new ThisClassEvent();
}
}
外部类作为事件监听器:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*Java事件处理机制:外部类作为事件监听器
*/
class OuterClassEvent extends JFrame{
JButton btn;
public OuterClassEvent(){
super("Java事件监听机制");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn=new JButton("点击");
btn.addActionListener(new OuterClass(this));
getContentPane().add(btn);
setBounds(200,200,300,160);
setVisible(true);
}
public static void main(String args[]){
new OuterClassEvent();
}
}
/*外部类*********************************/
class OuterClass implements ActionListener{
OuterClassEvent oce;
public OuterClass(OuterClassEvent oce){
this.oce = oce;
}
public void actionPerformed(ActionEvent e){
Container c=oce.getContentPane();
c.setBackground(Color.red);
}
}
/**************************************/
匿名内部类作为事件监听器:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*Java事件处理机制:匿名内部类作为事件监听器
*/
class AnonymousEvent extends JFrame{
JButton btn;
public AnonymousEvent(){
super("Java事件监听机制");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn=new JButton("点击");
/*匿名内部类******************************/
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
Container c=getContentPane();
c.setBackground(Color.red);
}
}
);
/***************************************/
getContentPane().add(btn);
setBounds(200,200,300,160);
setVisible(true);
}
public static void main(String args[]){
new AnonymousEvent();
}
}
内部类作为事件监听器:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*Java事件处理机制:内部类作为事件监听器
*/
class InnerClassEvent extends JFrame{
JButton btn;
public InnerClassEvent(){
super("Java事件监听机制");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn=new JButton("点击");
btn.addActionListener(new InnerClass());
getContentPane().add(btn);
setBounds(200,200,300,160);
setVisible(true);
}
/*内部类*********************************/
class InnerClass implements ActionListener{
public void actionPerformed (ActionEvent e){
Container c=getContentPane();
c.setBackground(Color.red);
}
}
/**************************************/
public static void main(String args[]){
new InnerClassEvent();
}
}