SWT Display用法
转载:https://blog.csdn.net/hangke/article/details/184201
Display处理消息机制是和底层平台相关的,以windwos平台为例
所有的系统消息首先被display截取,然后他会根据传入的hwnd,定位到相应的Control
,交由Control来处理。Control处理消息的时候,会根据消息的类型,转化为SWTEventObject对象,然后通知消息监听者。这样一来底层消息就转化为SWT的事件对象了。
例如:鼠标按下事件,首先操作系统会发送一个WM_LBUTTONDOWN的消息,经由Display转交Control处理,最后转化为MouseEvent。
如果你想自定义消息,需要调用操作系统底层的API函数,来创建用户自定义消息。
即便是这样,你的自定义消息,SWT是不认识的,也不会转化为相应的SWTEventObject的对象。要想处理自定义消息,你必须拦截Display的windowProc过程,来自己处理。但如此以来,已经严重的破坏了SWT的封装性,写出的代码也是平台相关的。
如果你想发送一个鼠标事件或键盘事件给一个控件,Display提供了一个便利的方法
post (Event event).
例如:Event event = new Event();
event.type = SWT.MouseDown;
event.x = 200;
event.y = 100;
event.button = 1;
display.post(event);
这样只要位于坐标200,100位置下的控件,都会收到一条鼠标按下事件。这个控件甚至可以不是SWT的窗体控件,任何的Windows窗体都可以收到这个事件。 因为Display已经将Event转化成了系统的鼠标按下消息。
post()方法是有局限性的,它只会转发鼠标和键盘消息。最终都是调用的OS.SendInput()方法。
Display:与操作系统沟通的桥梁
我们在前面说过,每个swt程序在最开始都必须创建一个Display对象。Display对象起什么作用呢?它是swt与操作系统沟通的一座桥梁。它负责swt和操作系统之间的通信。它将swt/JFace的各种调用转化为系统的底层调用,控制操作系统为swt分配的资源。同时我们也可以通过Display对象得到操作系统的一些信息。
Display是一个“幕后工作者”,它为swt/JFace提供支持,但是你并不能够从某个用户界面中看到它的影子。
在前面的Hello,world!程序中,我们可以看到构建一个Display对象是和普通的Java对象一样通过构造函数实现的。它为实现图形界面准备了最基本的条件。而在程序结束时我们必须显式地调用dispose() 方法来释放程序运行中所获得的资源。一般来说,一个程序只需要一个Display对象,当然没有人禁止你创建多个Display对象。但是在swt的javadoc中,我们可以看到关于这个问题一些描述:
“Applications which are built with SWT will almost always require only a single display. In particular, some platforms which SWT supports will not allow more than one active display. In other Words, some platforms do not support creating a new display if one already exists that has not been sent the dispose() message.”
Display有着众多的方法,我们不可能一一介绍。在这里只挑选几个可能会比较常用的作一些简单介绍。
·setData()和getData():这一对函数允许我们为Display对象设定一些数据,setData()的参数中key和value类似于我们在使用Map对象中key和value的含义。
·getShells()得到关联到该Display对象的所有没有dispose的Shell对象
·getCurrent()得到与用户交互的当前线程
·readAndDispatch()得到事件并且调用对应的监听器进行处理
·sleep()等待事件发生
SWT Display用法相关推荐
- Css3 display用法
display 属性规定元素应该生成的框的类型. display:none 此元素不会被显示 display:block 此元素将显示为块级元素,此元素前后会带有换行符 display:inl ...
- display 用法
display属性值: none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素,元素前后没有换行符. inline-b ...
- verilog入门笔记
教材:ModelSim电子系统分析及仿真 把设计当成黑盒子/白盒子 把mux当做一个黑盒子,称为行为级(系统级)描述 寄存器传输级(从语法角度的说法) 门级描述:直接描述mux的内部关系,里面有哪些门 ...
- eNSP配置(直连/静态/动态路由,DHCP,单臂路由,ACL,NAT,链路聚合,负载均衡,WLAN,备份路由)
目录 常见问题: 一.同/不同网段与网关之间通信 二.以太网基本VLAN 三.静态路由 四.动态路由 (1)OSPF(开放最短优先路径) 适用于大型网络结构 (补充DR BDR) 单区域 多区域 (2 ...
- 魔鬼字典 JavaScript 笔记 看不懂可以哭~~~
JS高级编程 第一章 JavaScript 基础 /**/↑↓←→ //2005中ctrl+J 有可能出提示 //文本编辑出注释的快捷键 名词解释: { //Java: 爪哇语言 ...
- QT解决因屏幕分辨率和缩放产生的界面异常
显示器分辨率和缩放比例 在某些情况下,由于屏幕分辨率和缩放比例不是100%,导致一些界面或字体的显示出现异常.此时需要获取到分辨率和缩放比例等相关参数,加以矫正,使界面在不同分辨率和缩放比例下都显示正 ...
- php switch 判断多个,php switch语句多个值匹配同一代码块的实现
php switch语句多个值匹配同一代码块的实现 先说说switch()语句的格式 switch(表达式){ case 匹配1: 当匹配1和表达式匹配成功执行的代码; break; case 匹配2 ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
- formlayout_精简SWT FormLayout的用法
formlayout 一直在追求效率,最近我重新考虑了SWT FormLayout的可用性. 尽管就灵活性而言,它是我最喜欢的核心布局之一,但我不得不认识到,大多数同仁都不愿意使用它. 考虑到面部Re ...
最新文章
- CListCtrl创建方法
- 如何学好Python?相信很多人都做错了!
- 16Adapter(适配器)模式
- 桂林机场春运期间新增多条航线航班 实现接力承运无缝衔接
- 基于pyBoard的进一步的一些测试实验,MC3008
- 行代码实现数据集可视化、分析与比较
- 008_html属性
- 高通QCA9563详细资料全集-datasheet-原理图-PCB-HDK等资料免费下载
- 天线远场定义_暗室静区及天线近场和远场的介绍
- cad断点快捷键_CAD命令:打断(BREAK)命令的使用技巧
- java.lang.reflect.Field常用方法
- 为串的模式匹配。模式匹
- HTML中禁止自动完成和禁用输入法
- 【TV Picture Quality - 02】TV常见信号接口
- SAP-MM知识精解-自动科目记账(04-2)- 业务事物之“科目分组代码”的影响
- 一键电子书:最好用的电子书一键生成软件
- 【matplotlib】绘制简单二维、三维图像
- oralce函数大全
- 关于软件项目code name代号命名
- java开发必须安装jre吗_安装jdk后还需要安装jre吗