SWT TextField回车触发多事件问题及排查分析
SWT TextField回车事件的触发逻辑与问题排查
事件触发现象
对SWT的TextField按下回车键时,会触发三类事件:
- SWT.KeyUp事件
- 数微秒后触发SWT.Dispose事件与SWT.DefaultSelection事件(后两者时间戳完全相同)
问题场景与成因
原本误以为回车只会触发一个事件,且事件会被第一个接收的处理器消费,但实际出现了KeyUp事件被非预期监听器接收的情况,而相关业务逻辑已通过Dispose和DefaultSelection处理器完成处理。经过排查,找到两个核心成因:
- 错误使用
event.character == SWT.CR判断回车事件,正确的判断方式应为event.keyCode == SWT.CR; - 在SWT.DefaultSelection监听器中调用了文本框的
dispose()方法,导致文本框失焦,携带CR的SWT.KeyUp事件被当前获焦的TabFolder接收。
关于监听器执行顺序的疑问
实际测试中发现,监听器似乎按添加顺序执行,但未在官方文档中找到相关说明,不确定这是偶然现象、依赖具体实现细节还是SWT的设计规范。
内容的提问来源于stack exchange,提问作者Gyro Gearloose
相关产品推荐
相关产品推荐

