java事件处理机制

如何通过键盘或鼠标的控制使Java程序中的功能有响应?

 

java事件处理机制--初步介绍

java事件处理是采取“委派事件模型”。所谓“委派事件模型”是指当事件发生时,产生事件的对象(即事件源),会把此“信息”传递给“事件的监听者”处理的一种方式,而这里所说的“信息”实际上就是java.awt.event事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”。

java事件处理机制委实践模型的好处有哪些_java

比如:当按下按钮时,就会在按钮触发一个“事件”,程序就会产生一个“事件对象”来表示这个事件,并把这个“事件对象”传递给“事件的监听者”,“事件的监听者”再根据“事件对象”的类型进行相应处理。

为了让“产生事件的对象”[比如按钮]知道要把事件传递给哪一个“事件监听者”,我们必需先把“事件监听者”在“产生事件的对象”注册,这个操作也就是要告知“产生事件的对象”要把事件传递给它。

java事件处理机制委实践模型的好处有哪些_事件源_02

/**
 * 功能:事件处理机制
 */
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

当一个窗口激活、关闭、失效、恢复、最小化...

java事件处理机制委实践模型的好处有哪些_java_03

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、事件传递是靠事件(类)对象