SWT组件添加事件的四种方式
在我们CS日常开发过程中会经常去为组件添加事件,我们常用的为AWT与SWT。SWT的事件模型是和标准的AWT基本一样的。下面将按照事件的四种写法来实现它。
一、匿名内部类的写法

new MouseAdapter()就是一个匿名内部类,我们去创建一个MouseAdapter类,它继承了MouseListener类,在类中去重写MouseListener的方法。
使用匿名内部类的形式来写代码简单方便,但是也有一些需要注意的缺点:
1)由于事件处理代码会随着组件一起分散在代码的各个部分,所以不够集中,这就会导致阅读,维护不方便。
2)代码以内部类形式处理,如果其他代码需要相同的逻辑则无法重用,导致代码不够简洁。
3)各个事件的处理完全使用嵌套程序块组成,视觉上会混乱,如果业务逻辑复杂,也会导致阅读,维护不方便。
二、命名内部类写法


事件代码使用命名内部类的方式可以解决匿名内部类存在的问题:事件处理代码都可以集中在一起,并且都具有有意义的名称,程序容易阅读与维护:另外单个事件处理程序也可以被工具栏,菜单栏等重用。
三、外部类写法
这种写法和命名内部类相似,只不过将MyMouseDoubleClick单独写为一个类文件,这种写法和命名内部类一样的优点,但是写一样单独的类文件要麻烦一点。
四、实现监听接口的写法


将HelloWorld类实现MouseListener接口,这样类本身就是一个监听器,使得加入监听器的代码可以更加的简单,这种方式适合加入监听器组件较多,并且要求监听器的事件处理代码可以被组件共用。因为实现MouseListener接口写的事件方法多,可以在没用到的事件方法进行空实现。还有特别注意的是事件方法和其他方法混合写在一起,容易产生误读,所以要在前面加上详细的注解说明
总结:
匿名内部类方式方便简单,但不适合代码多,逻辑复杂的情况。从代码书写,阅读,维护以及程序的可扩展性来看,命名内部类的写法最为推荐。外部类主要是为了代码重用才考虑使用。第四种方式要求组件可以共同使用事件代码时使用。
SWT组件添加事件的四种方式的更多相关文章
- Java添加事件的四种方式
Java添加事件的几种方式(转载了codebrother的文章,做了稍微的改动) /** * Java事件监听处理——自身类实现ActionListener接口,作为事件监听器 * * @author ...
- android点击事件的四种方式
android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...
- jQuery绑定事件的四种方式:bind、live、delegate、on
1.jQuery操作DOM元素的绑定事件的四种方式 jQuery中提供了四种事件监听方式,分别是bind.live.delegate.on,对应的解除监听的函数分别是unbind.die.undele ...
- 给TextView添加超链接的四种方式
因为在上上篇博客中介绍了SpannableString的使用(SpannableString使用详解),由此想到给TextView添加超链接究竟有多少种方式?经过个人总结,现在一共发现四种,如果还有其 ...
- jQuery绑定事件的四种方式
jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点,有助于我们在写代码的时候进行正确的选择,从而写出优雅而容易维护的代码.下面我们来看下jQuery中绑定事件的方式都 ...
- jQuery 事件绑定四种方式,delegate委托强大绑定在3.0中修改为on
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- React组件绑定this的四种方式
题图 By HymChu From lnstagram 用react进行开发组件时,我们需要关注一下组件内部方法this的指向,react定义组件的方式有两种,一种为函数组件,一种为类组件,类组件内部 ...
- jQuery绑定事件的四种方式区别
jQuery中提供了四种事件监听方式,分别是bind.live.delegate.on,对应的解除监听的函数分别是unbind.die.undelegate.off.在开始看他们之前 一:bind(t ...
- GRpc添加客户端的四种方式
随着微服务的发展,相信越来越多的.net人员也开始接触GRpc这门技术,大家生成GRpc客户端的方式也各不相同,今天给大家介绍一下依据Proto文件生成Rpc客户端的四种方式 前提:需要安装4个Nug ...
随机推荐
- 在ANSYS WORKBENCH中使用APDL命令的例子
如何在workbench中使用command? 如何在ansys workbench中插入apdl? 如何在ansys workbench中使用复杂载荷? 答案在APDL,他可以实现函数化的载荷,如岁 ...
- Spark1.3使用外部数据源时条件过滤只要是字符串类型的值均报错
CREATE TEMPORARY TABLE spark_tbls USING org.apache.spark.sql.jdbc OPTIONS ( url 'jdbc:mysql://hadoop ...
- 使用Struts2搭建登录注册示例
使用Struts2来搭建mvc网站框架还是比较容易的,Struts2提供了各项辅助功能,保证了web开发的快速方便.下面使用struts2来搭建一个登录注册示例. 0 项目结构截图 1 搭建Strut ...
- C#读取Excel遇到无法读取的解决方法
C#读取Excel遇到无法读取的解决方法:1.在导入数据连接字符串中,将IMEX=1加入,“Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\ ...
- 慕课网-Java入门第一季-7-4 编程练习
来源:http://www.imooc.com/code/1634 小伙伴们,请根据所学知识,参考注释,在代码编辑器中将代码补充完整.编写一个 Java 程序,实现输出学生年龄的最大值 要求: 1. ...
- Qt编程之mapx组件编程
今天利用组件打包程序写了一些小例子,给大家贴出来,顺便提高一下记忆. 上一篇介绍了直接使用控件和使用控件打包程序对控件进行编程的方法.个人感觉后者编程更方便.不说废话了: 头文件中所需要的类型指针对象 ...
- 删除Json中的不需要的键值
var json = {'A': 1, ,'B': 2, 'ccc': 333} delete json['ccc'];
- Broadcom以太网交换芯片培训
目录 1.交换芯片架构....................................................................................... ...
- Hadoop HDFS编程 API入门系列之RPC版本2(九)
不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.RPC.rpc2; public class LoginServiceImpl implement ...
- Android异常:唤醒锁未授权。(Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android.permission.WAKE_LOCK.)
Android异常:Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android ...