java中的事件机制

原创 2006年06月23日 15:05:00
Java做的图形界面软件通过事件响应机制实现用户与程序的交互,原理大概是这样:
首先,在java控件对象(比如文本框)上添加一个监控对象,方法是one.addXXXListenner(two),这就相当于你要对某人进行监听,先要在他身上绑定一个窃听器一样,这里“one”就是你要监听的那个家伙,two就是你自己造的一个窃听器。
第二步就是要考虑怎样造这个窃听器了,我们首先要搞清楚它要实现的功能:它不仅能够监听one的一举一动,还能够把监听到的事件告诉系统,并让系统对这个事件做出相应的处理。Java中是通过接口实现这样的功能的。这些接口请参见jdk中java.awt.event包,里面那几个XXXListener就是(不是很多,常用的更少)。在这些接口中定义了一些方法,这些方法就是相应的事件处理方式,它们只由系统调用并且都有一个事件类的对象作为参数,这个参数正是联系发生事件主体one和操作系统的纽带。当然接口是虚的,不能产生对象的;所以想必你也猜到,上面的“窃听器”two的类型肯定是某个实现了XXXListener接口的类。
好了,现在在回顾一下这个过程:
(1)用户通过鼠标、键盘等在one对象上做动作(比如点击鼠标),
(2)这个动作被two监听到并产生事件对象e(即XXXEvent的对象),
(3)two通过事件e对象向系统打报告,
(4)系统调用two中实现的方法对事件进行处理,并向方法传送事件e。
如果你清楚了这个过程,再来细看一下这个XXXListener接口。我们必须用类来实现接口的方法(这是java基础知识吧◎),再用这个类产生two这样的对象。类实现接口必须实现接口中的每个方法,而实际上我们需要的也许只是该接口中的某一个方法(比如处理鼠标右键点击的那个),那么每个方法还得去实现一个空的,真是浪费。Sun为了让程序员省点事,在JDK中已经为我们把这些接口实现好了,这些类就是我们所谓的“适配器”(XXXAdapter),我们只需要继承(extends)这些类并重写里面我们需要的方法就OK了,所以,其实适配器就是类,只不过这些类中只有一些空的方法,别无所有。
到此,你大概明白程序员在事件处理过程中该做哪些事了吧:
(1)制造“窃听器”,即:实现事件监听接口,重写相关方法,
(2)安装窃听器,即:为监控对象添加监听器。
 
下面,我们通过程序再来仔细看看事件响应的实现方式(待续):
(以下内容参考陈刚《eclipse从入门到精通》)
1)、 匿名内部类写法
例程:
text.addMouseListener(new MouseAdapter() {
    public void mouseDoubleClick(MouseEvent e) {//鼠标双击事件的方法
         //打开一个信息框
        MessageDialog.openInformation (null,"","Hello World");
    }
});
new MouseAdapter()就是一个匿名内部类。其实就是在实现类的同时用new构造一个该类的对象,并把它作为addMouseListener的参数,它的效果和下面的一样,只不过代码比较集中。
 
(2)、命名内部类写法
public class HelloWorld {
    public static void main(String[] args) {
           ……
        Text text = new Text(shell, SWT.BORDER);
//加入鼠标事件监听器,并用下面代码所定义的内部类生成一个对象
        text.addMouseListener(new MyMouseDoubleClick());
        ……
    }
 
//定义一个名为MyMouseDoubleClick的内部类
    private static final class MyMouseDoubleClick extends MouseAdapter {
        public void mouseDoubleClick(MouseEvent e) {
            MessageDialog.openInformation(null, "", "Hello World");
        }
    }
}
 
(3)、外部类写法
这种写法和命名内部类有些相似,只不过是将MyMouseDoubleClick类从HelloWorld.java中拿出去,单独写成一个类文件。实现代码如下
//文件1: HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
              ……
        Text text = new Text(shell, SWT.BORDER);
//加入鼠标事件监听器,并用下面代码所定义的内部类生成一个对象
        text.addMouseListener(new MyMouseDoubleClick());
        ……
    }
}
 
//文件2:MyMouseDoubleClick.java
public class MyMouseDoubleClick extends MouseAdapter {
    public void mouseDoubleClick(MouseEvent e) {
        MessageDialog.openInformation(null, "", "Hello World");
    }
}
(4)、实现监听接口的写法
将HelloWorld类实现MouseListener接口,这样类本身就成了一个监听器,使得加入监听器的代码可以更简洁。这种方式适合加入监听器的组件较多,且要求监听器的事件处理代码可以被组件共用。这种方式还有一个要注意的地方:事件方法和其他方法混合在了一起,容易引起误读,所以应该在事件方法前加入详细的注释说明。
实现MouseListener接口要写的事件方法多一些,当然没用的事件方法可以空实现。如果继承MouseListener接口的适配器MouseAdapter,则只写需要的方法就行了。另外要注意:只有接口才能有多继承的特性,所以如果HelloWorld已经是某个类的子类,就只能用实现接口的方式,而不能继承接口的适配器了。
给出示例代码如下:
public class HelloWorld extends MouseAdapter{//或implements MouseListener
    public static void main(String[] args) {
            ……
        Text text1 = new Text(shell, SWT.BORDER);
        Text text2 = new Text(shell, SWT.BORDER);
        text1.addMouseListener(this);
        text2.addMouseListener(this);
        ……
    }
 
    public void mouseDoubleClick(MouseEvent e) {
        MessageDialog.openInformation(null, "", "Hello World");
    }
}
 

Java知识总结----事件处理机制(九)

在上一篇文章中,跟大家介绍了队列的使用,在基于数据库的队列的是实现中,提到了可以使用事件处理机制类进行队列数据的处理。今天就来简单看看事件处理机制是怎么使用的。       首先我们需要一个事件的实...
  • lzy_lizhiyang
  • lzy_lizhiyang
  • 2015年09月12日 10:52
  • 941

java的事件处理机制

声明:此文为总结,非原创,可查阅参考中原文1 java中的事件机制和windows中的消息机制的区别Windows API可以开发窗口程序,Java通过Swing/AWT包也可以开发窗口程序,那么他们...
  • renwotao2009
  • renwotao2009
  • 2015年05月30日 21:32
  • 3703

Java中的事件处理与异常处理机制-解析

异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式...
  • heart_2015
  • heart_2015
  • 2016年05月25日 15:56
  • 2664

java基础学习——事件处理机制-事件监听器的实现方式

在Java的swing编程中,Java中的事件机制非常常用 事件监听器的参与者: 1.事件对象:  一般继承自java.util.EventObject对象,由开发者自行定义. 2...
  • yiziweiyang
  • yiziweiyang
  • 2016年08月25日 19:01
  • 2693

Java事件处理机制- 事件监听器的四种实现方式

自身类作为事件监听器外部类作为事件监听器匿名内部类作为事件监听器内部类作为事件监听器 自身类作为事件监听器:  Java代码   import javax.swing...
  • bfboys
  • bfboys
  • 2016年10月05日 22:31
  • 2365

java实现事件委托

事件委托 委托
  • shuciqi
  • shuciqi
  • 2014年05月13日 14:27
  • 2308

Java事件处理机制和适配器

最重要的是理解事件源,监视器,处理事件的接口的概念。 1.事件源:是能够产生时间的对象都可以叫事件源,比如文本框,按钮,下拉列表之类的组件。2.监视器:事件源要产生事件,必须要有什么东西去监视它,以...
  • tuke_tuke
  • tuke_tuke
  • 2015年07月21日 13:17
  • 1484

java事件机制包括三个部分:事件、事件监听器、事件源

java事件机制包括三个部分:事件、事件监听器、事件源。   1、事件。一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息。 com.java...
  • crazysusu
  • crazysusu
  • 2016年02月24日 16:48
  • 4179

关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

转载:http://blog.csdn.net/5iasp/article/details/37054171 谢谢博主 ==================================...
  • hackxiaoF
  • hackxiaoF
  • 2016年06月16日 10:45
  • 2784

JAVA图形界面(GUI)之事件处理机制

之前几篇博客中,我们编写了一些示例,但是这些示例并不能与读者进行交互,读者之所以对图形界面感兴趣,就是因为图形界面与读者交互能力强。但是单纯的界面是没有使用价值的,要是图形界面能与读者交流,那么必须了...
  • jianggujin
  • jianggujin
  • 2016年01月03日 20:31
  • 4203
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的事件机制
举报原因:
原因补充:

(最多只允许输入30个字)