java中事件监听的4种写法

某F注:下面的东西基本上都是我从一本叫《Eclipse从入门到精通》的书上抄的...因为这书是从图书馆借的= =我怕以后我找不着了。。就抄下来了...除了标记出来的我的注释,都是书上的原文..

一.匿名内部类写法

例:

//addMouseListener  加入鼠标事件的监听器

text.addMouseListener(new MouseAdpter(){

    public void mouseDoubleClick(MouseEvent e){

         MessageDialog.openInformation(null,"","Hello World");

    }

});

//=====================================//

这种写法简单方便,但是也有一些缺点:(某F注:其实看起来也很不方便..)

1.由于事件处理代码会随着组件一起分散在代码中的各个部分,不够集中,这样会导致代码阅读与维护上的不便

2.各事件的处理全部由嵌套的程序块组成,视觉上回显示有些乱。如果事件处理代码很长,也会导致阅读与维护上的不便

3.当工具栏、菜单栏等也需要处理相同的用户行为时,无法重用事件中的处理代码,导致代码不够简洁

二.命名内部类写法

例:

public class HelloWorld{

  public static void main(String args[]){

.......

Text text=new Text(shell,SWT.BORDER);

//加入事件监听器,并用下面代码所定义的内部类生成一个对象

text.addMouseListener(new MyMouseDoubleClick());

.......

}

//定义内部类

private static final class MyMouseDoubleClick extends MouseAdapter{

  public void mouseDoubleClick(MouseEvent e){

  MessageDialog.openInformation(null,"","Hello World");

}

}

}

三.外部类写法

这种写法和命名内部类有些相似,只不过将MyMouseDoubleClick类从HelloWorld.java中拿出去,单独写成一个类文件。这种写法有和命名内部类一样的有点,但因为要单独写成一个文件,写起来会麻烦一些,实现代码部分如下:

//文件1 

public class HelloWorld{

public static void main(String args[]){

...

text.addMouseListener(new MyMouseDoubleClick());

...

}

}

//文件2

public class MyMouseDoubleClick extends MouseAdapter{

public void mouseDoubleClick(MouseEvent e){

MessageDialog.openInformation(null,"","Hello World");

}

}

四.实现监听接口的写法

(某F:我最常用的办法...)

将HelloWorld类实现MouseListener接口,这样类本身就成了一个监听器,使得加入监听器的代码可以更简洁。这种方法适合加入监听器的组件较多,并且要求监听器的事件处理代码可以被组件共用。这种方式还有一个要注意的地方:事件方法和其他方法混合在一起,容易引起误读。所以应该在事件方法前加入详细的注释说明。

实现MouseListener接口要写的事件方法多一些,当然没用的事件方法可以空实现。如果继承MouseListener接口的适配器MouseAdapter,则指写需要的方法就行了。但是另外要注意,只有接口才能有多继承的特性,所以如果HelloWorld已经是某个类的子类,就只能用实现接口的方式,而不能继承接口的适配器了。

示例代码如下:

public class HelloWorld extends MouseAdapter{//或者implements MouseListener

public static void main(String args[]){

  new HelloWorld().createContent();

}

private void createContent(){

...

text.addMouseListener(this);

...

}

public void mouseDoubleClick(MouseEvent e){

MessageDialog.openInformation(null,"","Hello World");

}

}

总结

匿名内部类方式写起来要方便些,但不适合事件代码太长、太多的情况。从代码书写、阅读、维护以及程序的可拓展性角度来看,明明内部类写法最为值得推荐。外部类的书写主要是为了代码重用才考虑使用,如果包外的类要用到此事件处理代码,此时外部类就派上用场了。而第四种写法,要求组建都可以共用事件代码时才能使用(某F注:或者多加几个if(e.getSource()==XXX)...反正我一直这么干……)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值