初识事件处理

本文系作者学习资料整理,不足之处请大家指正,谢谢!

本文参考资料:《java se6 全方位学习》 朱仲杰编著  机械工业出版社

 

java事件处理架构

一个java事件包含三部分1.事件本身    2.事件来源    3.谁来处理

以点击窗口的右上角的叉来说,点击叉是事件本身,而窗口则是事件的来源,选择谁来处理需要我们自己设定,也就是一个操作,一个组件,还有一个方法。只不过这个方法是一个自定义的新类的方法。

 

java的委托事件模式(Delegation Event Model)

这种模式就是来处理用谁来处理事件的。我们委托某个类来处理事件时,那么这个类需要继承相应的事件类或实现相应的事件接口,如xxxAdapter,xxxListener。并且需要将这个类向组件注册,否则在组件上发生的事件不会传到自定义类的方法中去处理。例子1如下:

import java.awt.*;

import java.awt.event.*; 

public class  WindowEventTest{

public static void main(String[ ]  args)

{

   Frame f = new Frame( "WindowEventTest");

   f.setSize(600,400);

   f.setVisible(true);

   f.addWindowListener(new WindowEventHandler);

  //将自定义类WindowEventHandler注册到组件(即由Frame类生成的一个对象f)

 // 对于不同的事件,需要不同的addxxxListener方法。

}

} 

// 自定义类WindowEventHandler

// class WindowEventHandler  implements WindowListener

// 我们不选实现接口(WindowListener),而选择继承类(WindowAdapter),原因在于实现接口要实

//  现接口里的所以方法,而WindowAdapter类已经为我们实现接口WindowListener中所有方法,

//  当然都是空实现,我们要做的只是重写我们需要的方法。

class WindowEventHandler  extends WindowAdapter

{

   public void windowClosing(WindowEvent e)

{

     System.exit(0);    // 表示当点击窗口右上角的叉时,关闭窗口,退出程序

}

}

 

注:在上面的例子中,我们列出了事件处理的基本内容:

我们需要一个事件来源,即一个Frame对象;事件本身是点击窗口右上角的叉;如何处理,即我们委托自定义类来处理,当然这个自定义类需要继承相应的事件类(xxxAdapter),或实现相应的接口(xxxListener); 

例子2:

当然我们可以调用public 这个类,也就是类WindowEventTest2来当做事件的处理者,这样的话我们需要将自己(也就是public这个类)注册组件中,形如f.addWindowListener(this);  上面程序可以改写为:

import java.awt.*;

import java.awt.event.*; 

public class  WindowEventTest2  extends WindowAdapter{ //本身这个类要继承或实现

Frame f ;        // 将Frame 对象f 作为 public类的属性,那么public类中的所有方法都可以调用。

public static void main(String[ ]  args)

{

   new WindowEventTest2( );      //  生成一个WindowEventTest对象

 }

public WindowEventTest2( )      // 构造函数,在它内部进行初始化

{

   f = new Frame("WindowEventTest2");

   f.addWindowListener(this);    //委托WindowEventTest2,也就是自己本身,所以用this

   f.setSize(600,400);

   f.setVisible(true);

}

   public void windowClosing(WindowEvent e)

{

     System.exit(0);    // 表示当点击窗口右上角的叉时,关闭窗口,退出程序

}

}

注:

1.我们需要使public类继承Adapter类或实现Listener接口,当然可以实现多个接口用来处理不同的事件。

2.因为this不能用在static方法中,所以不能在main方法中使用,所以设计了构造函数来进行初始化和将类本身向组件注册。

 

后面我们将使用匿名内部类来代替自定义类,这样我们省去了给一个自定义类取一个有意义的名字的麻烦。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值