java事件处理机制
如何通过键盘或鼠标的控制使Java程序中的功能有响应?
java事件处理机制--初步介绍
java事件处理是采取“委派事件模型”。所谓“委派事件模型”是指当事件发生时,产生事件的对象(即事件源),会把此“信息”传递给“事件的监听者”处理的一种方式,而这里所说的“信息”实际上就是java.awt.event事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”。
比如:当按下按钮时,就会在按钮触发一个“事件”,程序就会产生一个“事件对象”来表示这个事件,并把这个“事件对象”传递给“事件的监听者”,“事件的监听者”再根据“事件对象”的类型进行相应处理。
为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪一个“事件监听者”,我们必需先把“事件监听者”在“产生事件的对象”注册,这个操作也就是要告知“产生事件的对象”要把事件传递给它。
/**
* 功能:事件处理机制
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Window016 extends JFrame implements ActionListener{
//定义组件
JPanel mp=null;
JButton jb1,jb2;
public static void main(String[] args) {
Window016 win=new Window016();
}
//构造函数
public Window016(){
//创建组件
mp=new JPanel();
jb1=new JButton("黑色");
jb2=new JButton("红色");
//设定布局管理器
//加入组件
mp.setBackground(Color.black);
this.add(mp);
this.add(jb1,BorderLayout.NORTH);
this.add(jb2,BorderLayout.SOUTH);
//猫类在监听
Cat mycat1=new Cat();
jb1.addActionListener(mycat1);
jb2.addActionListener(mycat1);
//注册监听
jb1.addActionListener(this);
jb2.addActionListener(this);
//指定action命令,用来区分是哪个按钮点击
jb1.setActionCommand("黑色");
jb2.setActionCommand("红色");
//JFrame窗体设置
this.setTitle("事件处理机制");
this.setSize(400, 300);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//对事件处理的方法
public void actionPerformed(ActionEvent e) {
//判断是哪个按钮被点击
if(e.getActionCommand().equals("黑色")){
System.out.println("点击了黑色按钮");
mp.setBackground(Color.BLACK);
}else if(e.getActionCommand().equals("红色")){
System.out.println("点击了红色按钮");
mp.setBackground(Color.RED);
}else{
System.out.println("不知道");
}
}
}
class Cat implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
if(arg0.getActionCommand().equals("黑色")){
System.out.println("Cat也知道你按下了黑色按钮");
}else if(arg0.getActionCommand().equals("红色")){
System.out.println("Cat也知道你按下了红色按钮");
}else {
System.out.println("Cat也不知道");
}
}
}
java事件处理机制--深入理解
前面提到了几个重要的概念
1、事件源;2、事件;3、事件监听器
这几个概念非常重要,必需要搞清楚。
1、事件源
事件源是一个产生(或触发)事件的对象,比如前面的JButton的一个对象jb1。当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)。如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册。
2、事件
事件就是承载事件源状态改变时的信息对象。或者说,事件是事件源事件监听器传输事件源状态信息的载体。在用户与GUI组件进行交互时就会生成事件,比如当鼠标在面板中移动时,就会生成一个鼠标移动事件的对象,而这个对象保存着当前鼠标在面板中位置信息。java.awt.event包和javax.swing.event包中定义了各种事件类型,常见的事件类有:
事件类 | 说明 |
ActionEvent | 通常在按下按钮,或双击一个列表项或选中某个菜单时发生 |
AdjustmentEvnet | 当操作一个滚动条时发生 |
ComponentEvent | 当一个组件隐藏、移动、改变大小时发送 |
ContainerEvent | 当一个组件从容器中加入或者删除时发生 |
FocusEvent | 当一个组件获得或是失去焦点时发生 |
ItemEvent | 当一个复选框或是列表项被选中时,当一个选择框或选择菜单被选中 |
KeyEvent | 当从键盘的按键被按下,松开时发生 |
MouseEvent | 当鼠标被拖动、移动、点击、按下.. |
TextEvent | 当文本区和文本域的文本发生改变时发生 |
WindowEvent | 当一个窗口激活、关闭、失效、恢复、最小化... |
3、事件监听器接口
事件源产生一个事件,可以传送给事件监听者处理,那么怎样才能编写一个事件监听者呢?
事件监听者实际上就是一个类,该类实现了某个事件监听器接口、比如前面我们案例中的MyPanel就是一个类,它实现了ActionListener接口,它就可以作为一个事件监听者,对接受到的事件进行处理。
事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口,这些接口在java.awt.event和javax.swing.event包中定义。
java事件处理机制--总结
总结--事件编程步骤:
1、编写事件处理类(事件监听者)
2、根据需求给事件处理类实现监听器接口
3、在事件处理中重写(实现)其事件处理的函数
4、在事件源类中指定该事件的监听器(响应者)是谁
注意事项:
1、java采用委托机制处理事件
2、java中的事件是分类的,比如对窗体事件、鼠标事件、按键事件、操作事件[按按钮]
3、java中一个类要监听某个事件,则必需实现相应的事件监听接口
4、事件监听接口有多种,程序员应当针对不同的情况,实现不同的监听接口,比如监听鼠标事件就应当实现MouseListener;要监听键盘事件,就应当实现KeyListener..
5、在实现监听接口的类(事件监听类/者)中,需要重写处理函数,比如实现了ActionListener接口,就应当重写actionPerformed(ActionEvent e),可以参考前面的事件监听器接口表格
6、在事件源中需要注册事件监听类。否则事件监听类接收不到事件源发生的事件。
一个类要实现监听的步骤:
a、实现相应的接口[KeyListener/MouseListener/ActionListener/WindowListener]
b、把接口的处理方法根据需要重新编写(Override)
c、在事件源上注册监听
d、事件传递是靠事件(类)对象