SWT: 发起事件 post event
有很多学习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相关推荐
- 技术干货 | JavaScript 之事件循环(Event Loop)
导读:学过 JavaScript(下文简称 JS) 的都知道它是一门单线程的.非阻塞的脚本语言.单线程意味着,JS 代码在执行的任何时候,都只有一个主线程来处理所有的任务,这也就意味着 JS 无法进行 ...
- 在html上绑定touch,实现html元素跟随touchmove事件的event.touches[0].clientX移动
主要是使用了transform:translateX 实现 newWaterChart * { padding:0; margin:0; -webkit-box-sizing: border-box; ...
- 记录-MySQL中的事件调度Event Scheduler
下面是自己的实例 /*查询event是否开启(查询结果Off为关闭 On为开启)*/ show variables like '%sche%'; /*开启/关闭命令(1开启--0关闭)*/ set g ...
- mysql数据库什么是事件_MySQL数据库之mysql 事件(Event) 总结
本文主要向大家介绍了MySQL数据库之mysql 事件(Event) 总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1 事件简介 事件(event)是MySQL在相应的时 ...
- javaScript中的事件对象event是怎样
事件对象event,每当一个事件被触发的时候,就会随之产恒一个事件对象event,该对象中主要包含了关于该事件的基本属性,事件类型type(click.dbclick等值).目标元素target(我的 ...
- js进阶课程 12-9 jquery的事件对象event的方法有哪些?
js进阶课程 12-9 jquery的事件对象event的方法有哪些? 一.总结 一句话总结:三组六个,阻止默认事件一组,阻止冒泡一组,阻止冒泡和剩余事件一组. 1.事件的默认动作指什么? 比如点a标 ...
- C#事件(Event)的理解
文章目录 C#事件(Event)的理解 **事件的定义:** 事件的类型 C#事件(Event)的理解 事件的定义: C# 事件(Event): 基本上说是一个用户操作,如按键.点击.鼠标移动等等,或 ...
- python事件循环_简单了解一下事件循环(Event Loop)
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event
[DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event 事件 事件(Event)是用来通知代码,一些有趣的事情发生了. 每一个Event都会被一个Eve ...
最新文章
- JAVA 实现 快速排序算法
- 低代码、无代码?深度解读硅谷新趋势(上)
- tcp连接 本地端口_Windows开启端口转发功能
- 【学习笔记】20、日期和时间模快
- SAP按单生产和重复制造
- oracle根据分区移动,Oracle 12c 在线移动分区和部分分区read only
- matlab制作以太网数据接收上位机_Python制作串口通讯上位机
- php数组获取差集,php数组求差集问题
- java levenshtein算法_DNA分析 拼字检查 语音辨识 抄袭侦测 - Levenshtein算法
- 登录Ubuntu提示有软件包可以更新
- 【滤波器】基于matlab GUI FIR+IIR数字滤波器设计【含Matlab源码 324期】
- 用Protel 99 SE学习原理图的设计及pcb的绘制
- 安全加密 - DEP, ASLR
- 8大风险识别工具,轻松应对风险管理
- java九宫格代码_Java实现九宫格的简单实例
- 【路径规划】基于粒子群算法实现机器人栅格地图路径规划matlab源码
- windows小工具txt转xlsx
- c++内存分区、创建变量开辟内存
- word文档保存的时候,就会出现“文件许可权错误,word 无法完成保存文件”的提示
- 暴力+格式转化+板子真题 蓝桥