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 ...
随机推荐
- MYSQL PERFORMANCE_SCHEMA HINTS
ACCOUNTS NOT PROPERLY CLOSING CONNECTIONS [ 1 ] Works since 5.6 SELECT ess.user, ess.host , (a.total ...
- servlet filter和springMVC拦截器的区别
参考 http://blog.csdn.net/ggibenben1314/article/details/45341855
- Thinkphp的单字母函数整理
有人不太喜欢TP这种单字母函数,其实这也是TP的一个特色,如果理解了这些函数的作用,不管是背,还是写,都是非常方便的,接下来我们以字母顺序开始.A函数 B函数 C函数 D函数 F函数 L函数 R函数 ...
- CMakeLists.txt for nginx
project(nginx) cmake_minimum_required(VERSION 2.8) aux_source_directory(. SRC_LIST) aux_source_direc ...
- arcgis将图片转成shp地图
打开arcMap 1.右键[图层]-[属性]-[坐标系]-[地理坐标系]-双击"WGS 1984" 2.右键[图层]-[添加数据],打开图片文件-Band_2 3.右键图片-[属性 ...
- javascript Windouw 转自 http://www.cnblogs.com/kissdodog/archive/2013/01/01/2841464.html
javascript之window对象 window :window对象是BOM中所有对象的核心,除了是BOM中所有对象的父对象外,还包含一些窗口控制函数. 1.全局的window对象 JavaScr ...
- JAVA初学(1):值类型和引用类型的区别
JAVA值类型和引用类型的区别(转) [定义] 引用类型表示你操作的数据是同一个,也就 ...
- VS有效序列号
VS2005 : KYTYH-TQKW6-VWPBQ-DKC8F-HWC4J VS2008 : PYHYP-WXB3B-B2CCM-V9DX9-VDY8T VS2010 : YCFHQ-9DWCY-D ...
- PS 使用首记 修改png图片的颜色
ps打开png图片文件 改颜色 1.魔棒工具,选择图片中的圆圈或方框,双击,选中,出现蚂蚁线. 2.右侧调好颜色 3.alt+delete颜色就改成功了.保存ok. 吸管工具,吸到颜色,存到色板.需要 ...
- MongoDB是一个介于关系数据库和非关系数据库之间的产品
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.M ...