事件源
事件源是一个产生或者触发事件的对象,比如前面的按钮或者按键,当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件,一个事件源可能会产生多个不同类型的事件,如果某个组件(对象)希望得到事件源的事件,就需要在这个事件源上注册。
事件
事件就是承载事件源状态改变时的信息对象。或者说事件是事件源向事件监听器传输事件源状态信息的载体,在用户与GUI组件进行交互时就会生成事件,比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存这当前鼠标在面板中的位置信息。
事件监听器接口
事件监听者实际上就是一个类,该类实现了某个时间监听器接口,比如之前的MyPanel就是一个类,她实现了ActionListener接口,她就可以作为一个事件监听者,对接受到的事件进行处理,时间监听器接口有多种,不同的事件监听器可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口。
package chen.com;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
//这个类NotePad就是监听者
public class Notepad extends JFrame{
MyPanel mp = null;
public static void main(String[] args) {
Notepad myclass = new Notepad();
}
public Notepad(){
mp = new MyPanel();
this.add(mp);
//注册监听
this.addMouseListener(mp);
this.addKeyListener(mp);
this.setSize(300,200);
this.setLocation(200,100);
this.setTitle("change the background");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyPanel extends JPanel implements MouseListener,KeyListener{
int x = 10,y = 100;
@Override
public void paint(Graphics g) {
super.paint(g);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("x = " + e.getX() + " y = " + e.getY());
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标来了");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标走了");
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按了:" + e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
}
}
总结
- java采用委托机制处理事件
- java中的事件是分类的,比:对窗体事件、鼠标事件、按键事件
- java中一个雷要监听某个事件,则必须实现相应的事件监听接口
- 事件监听接口有很多种,程序员应担针对不同的情况实现不同的监听接口
- 在事件源中需要注册事件监听类,否则事件监听类接收不到事件源发生的事件