有很多学习SWT的同志遇到过一类需求,为某些控件添加了诸如MouseListener、KeyListener之类的监听,然后呢,希望使用代码模拟鼠标、键盘来执行点击、按键等操作。

首先说明一点,这是可以实现的,但是99%的需求都不应该这样实现。

在继续往下看之前,请你考虑一点,你是不是可以把监听中的逻辑代码抽离出来,做成单独的可供调用的功能块,在你希望“模拟”的地方调用它。

如果实在考虑不出更好的方式,请往下看。

解决方案很简单:

                Event ex = new Event();ex.widget = targetWidget;ex.type = SWT.KeyDown;ex.button = 1;Display.getCurrent().post(ex);

自己构建一个事件,为该事件指定一个控件目标,然后发起它。

那么,如此简单的代码,为什么你还需要搜索呢?

这里说说,在对发起事件无甚了解又不想看API的情况下的解决思路。

1、为任意控件添加一个监听,打断点,触发它

通过这个步骤,我们可以看出,事件Event都是通过Display的readAndDispatch方法进行调度分发的。

2、读到runDeferredEvents方法中,可以观察到eventQueue事件队列,你应该能敏感的察觉到你需要往这里面添加Event,才有可能发起事件

3、ctrl+shift+G搜索eventQueue在Display里的使用,可以观察到sentEvent、postEvent等等方法,先不要看源码,ctrl+o,可以看出,Display对外提供了一个post(Event)方法

4、那么,调用post就可以了么?我们再来看看步骤2位置,阅读以下源码:

/* Run the event */Widget widget = event.widget;if (widget != null && !widget.isDisposed ()) {Widget item = event.item;if (item == null || !item.isDisposed ()) {run = true;widget.sendEvent (event);}}

可以看出,充要条件是event必须具备一个未被disposed的widget。

以上,即可得出早前的解决方案。

转载于:https://www.cnblogs.com/anrainie/p/4203890.html

SWT: 发起事件 post event相关推荐

  1. 技术干货 | JavaScript 之事件循环(Event Loop)

    导读:学过 JavaScript(下文简称 JS) 的都知道它是一门单线程的.非阻塞的脚本语言.单线程意味着,JS 代码在执行的任何时候,都只有一个主线程来处理所有的任务,这也就意味着 JS 无法进行 ...

  2. 在html上绑定touch,实现html元素跟随touchmove事件的event.touches[0].clientX移动

    主要是使用了transform:translateX 实现 newWaterChart * { padding:0; margin:0; -webkit-box-sizing: border-box; ...

  3. 记录-MySQL中的事件调度Event Scheduler

    下面是自己的实例 /*查询event是否开启(查询结果Off为关闭 On为开启)*/ show variables like '%sche%'; /*开启/关闭命令(1开启--0关闭)*/ set g ...

  4. mysql数据库什么是事件_MySQL数据库之mysql 事件(Event) 总结

    本文主要向大家介绍了MySQL数据库之mysql 事件(Event) 总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1 事件简介 事件(event)是MySQL在相应的时 ...

  5. javaScript中的事件对象event是怎样

    事件对象event,每当一个事件被触发的时候,就会随之产恒一个事件对象event,该对象中主要包含了关于该事件的基本属性,事件类型type(click.dbclick等值).目标元素target(我的 ...

  6. js进阶课程 12-9 jquery的事件对象event的方法有哪些?

    js进阶课程 12-9 jquery的事件对象event的方法有哪些? 一.总结 一句话总结:三组六个,阻止默认事件一组,阻止冒泡一组,阻止冒泡和剩余事件一组. 1.事件的默认动作指什么? 比如点a标 ...

  7. C#事件(Event)的理解

    文章目录 C#事件(Event)的理解 **事件的定义:** 事件的类型 C#事件(Event)的理解 事件的定义: C# 事件(Event): 基本上说是一个用户操作,如按键.点击.鼠标移动等等,或 ...

  8. python事件循环_简单了解一下事件循环(Event Loop)

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  9. [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event

    [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event 事件 事件(Event)是用来通知代码,一些有趣的事情发生了. 每一个Event都会被一个Eve ...

最新文章

  1. JAVA 实现 快速排序算法
  2. 低代码、无代码?深度解读硅谷新趋势(上)
  3. tcp连接 本地端口_Windows开启端口转发功能
  4. 【学习笔记】20、日期和时间模快
  5. SAP按单生产和重复制造
  6. oracle根据分区移动,Oracle 12c 在线移动分区和部分分区read only
  7. matlab制作以太网数据接收上位机_Python制作串口通讯上位机
  8. php数组获取差集,php数组求差集问题
  9. java levenshtein算法_DNA分析 拼字检查 语音辨识 抄袭侦测 - Levenshtein算法
  10. 登录Ubuntu提示有软件包可以更新
  11. 【滤波器】基于matlab GUI FIR+IIR数字滤波器设计【含Matlab源码 324期】
  12. 用Protel 99 SE学习原理图的设计及pcb的绘制
  13. 安全加密 - DEP, ASLR
  14. 8大风险识别工具,轻松应对风险管理
  15. java九宫格代码_Java实现九宫格的简单实例
  16. 【路径规划】基于粒子群算法实现机器人栅格地图路径规划matlab源码
  17. windows小工具txt转xlsx
  18. c++内存分区、创建变量开辟内存
  19. word文档保存的时候,就会出现“文件许可权错误,word 无法完成保存文件”的提示
  20. 暴力+格式转化+板子真题 蓝桥

热门文章

  1. vue 日期面板_VUE项目中如何方便的转换日期和时间
  2. Filebeat 将多个日志输出到不同的 Kafka Topic
  3. java date和localdate_Java8 Date与LocalDate互转
  4. Coursera心理学课程考试小抄
  5. 【操作系统】Mac环境配置
  6. JavaScript数据类型之数据类型之间的转换(6)
  7. 验证码绕过(对验证码绕过的理解-----burpsuite)
  8. 计算机组成原理解答题和计算题
  9. 递归法:从n个小球中取m个小球(不放回),共有多少种取法?
  10. 常见图片格式与调色算法