转载: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用法相关推荐

  1. Css3 display用法

    display 属性规定元素应该生成的框的类型. display:none   此元素不会被显示 display:block   此元素将显示为块级元素,此元素前后会带有换行符 display:inl ...

  2. display 用法

    display属性值: none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素,元素前后没有换行符. inline-b ...

  3. verilog入门笔记

    教材:ModelSim电子系统分析及仿真 把设计当成黑盒子/白盒子 把mux当做一个黑盒子,称为行为级(系统级)描述 寄存器传输级(从语法角度的说法) 门级描述:直接描述mux的内部关系,里面有哪些门 ...

  4. eNSP配置(直连/静态/动态路由,DHCP,单臂路由,ACL,NAT,链路聚合,负载均衡,WLAN,备份路由)

    目录 常见问题: 一.同/不同网段与网关之间通信 二.以太网基本VLAN 三.静态路由 四.动态路由 (1)OSPF(开放最短优先路径) 适用于大型网络结构 (补充DR BDR) 单区域 多区域 (2 ...

  5. 魔鬼字典 JavaScript 笔记 看不懂可以哭~~~

    JS高级编程      第一章  JavaScript 基础  /**/↑↓←→ //2005中ctrl+J   有可能出提示 //文本编辑出注释的快捷键 名词解释: { //Java:   爪哇语言 ...

  6. QT解决因屏幕分辨率和缩放产生的界面异常

    显示器分辨率和缩放比例 在某些情况下,由于屏幕分辨率和缩放比例不是100%,导致一些界面或字体的显示出现异常.此时需要获取到分辨率和缩放比例等相关参数,加以矫正,使界面在不同分辨率和缩放比例下都显示正 ...

  7. php switch 判断多个,php switch语句多个值匹配同一代码块的实现

    php switch语句多个值匹配同一代码块的实现 先说说switch()语句的格式 switch(表达式){ case 匹配1: 当匹配1和表达式匹配成功执行的代码; break; case 匹配2 ...

  8. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

  9. formlayout_精简SWT FormLayout的用法

    formlayout 一直在追求效率,最近我重新考虑了SWT FormLayout的可用性. 尽管就灵活性而言,它是我最喜欢的核心布局之一,但我不得不认识到,大多数同仁都不愿意使用它. 考虑到面部Re ...

最新文章

  1. CListCtrl创建方法
  2. 如何学好Python?相信很多人都做错了!
  3. 16Adapter(适配器)模式
  4. 桂林机场春运期间新增多条航线航班 实现接力承运无缝衔接
  5. 基于pyBoard的进一步的一些测试实验,MC3008
  6. 行代码实现数据集可视化、分析与比较
  7. 008_html属性
  8. 高通QCA9563详细资料全集-datasheet-原理图-PCB-HDK等资料免费下载
  9. 天线远场定义_暗室静区及天线近场和远场的介绍
  10. cad断点快捷键_CAD命令:打断(BREAK)命令的使用技巧
  11. java.lang.reflect.Field常用方法
  12. 为串的模式匹配。模式匹
  13. HTML中禁止自动完成和禁用输入法
  14. 【TV Picture Quality - 02】TV常见信号接口
  15. SAP-MM知识精解-自动科目记账(04-2)- 业务事物之“科目分组代码”的影响
  16. 一键电子书:最好用的电子书一键生成软件
  17. 【matplotlib】绘制简单二维、三维图像
  18. oralce函数大全
  19. 关于软件项目code name代号命名
  20. java开发必须安装jre吗_安装jdk后还需要安装jre吗

热门文章

  1. hdu 1028 母函数入门题
  2. 可配置Modbus网关 嵌入式设备联网解决方案
  3. 任意钝角三角形都可以分割为7个锐角三角形
  4. OpenCV 4.7 版本发布
  5. 从滔搏财报看鞋服零售:压力未除,但曙光渐近
  6. 阿里云服务器购买帮助说明文档
  7. 使用AntiSamy拦截xss攻击
  8. Centos5.7--64位下使用RPMForge软件仓库
  9. CiteSeer统计的计算机领域的期刊和会议的影响因子(2005)
  10. 思必驰自研AI芯片不仅方式独特,首代毫瓦级AI语音芯片也仅用1年...