出于对效率的追求,我最近重新考虑了SWT FormLayout的可用性。 尽管就灵活性而言,它是我最喜欢的核心布局之一,但我不得不认识到,大多数同事都不情愿地使用它。 考虑到面部反应,建议将其建议用于适当的任务有时实际上会造成真正的身体疼痛……

确实,在仔细检查之后,人们不得不承认这种用法至少有点麻烦。 布局本身与其所到达的每个控件的FormData配置FormData 。 下面的代码片段显示了一个简单的用例–好吧,我不会破坏自己发现它的作用的乐趣:

Label label = new Label( composite, SWT.NONE );
FormData labelData = new FormData();
label.setLayoutData( labelData );
labelData.top = new FormAttachment( 0 );
labelData.right = new FormAttachment( 100 );
labelData.bottom = new FormAttachment( 100 );
labelData.left = new FormAttachment( 0 );

当然,每个人都可以弄清楚代码的功能。 但是它确实具有真正解决问题的想法–我想这是问题的一部分。 那么,如何以下面的方式编写这种不太冗长但仍然更具表现力的代码:

Label label = new Label( composite, SWT.NONE );
attach( label ).atTop().atRight().atBottom().atLeft();

尽管它绝对更紧凑,但在旁观者看来,至少在某种程度上来说,表现力在很大程度上取决于人们眼前的任务所具有的隐喻。 在我的想象中, FormLayout基本上控件边界附加到某些参考点,即顶部atTop ,这意味着它始终将控件的顶部保持在父级客户区域的上限。

或者,它在顶部将一个控件附加到另一个控件,这意味着该控件的上侧始终与另一个控件的底部对齐。 此外,可以将一个边附加到与各自客户区绑定的百分比范围内,所有这些都可以这样表示:

attach( control ).atLeftTo( otherControl ).fromTop( 20 );

以此思路,我开发了一个名为FormDatas实用程序小类,以将概述的思想付诸实践。 该类提供了一个静态方法attach来创建FormData的新实例,该实例在作为参数指定的控件处注册。 返回的布局数据实例由FormDatas对象包装,以启用配置方法1的流畅接口样式。

另外,还有很多方法变体可以处理,例如边距对齐的概念。 边距基于基础的Attachment#offset属性,但实际上尊重附件的一面。 因此,5 atRight的边距对应于已使用分子100分配给FormData#right属性的Attachment的偏移量-5:

attach( label ).atRight( 5 );

的缩写

FormData formData = new FormData();
label.setLayoutData( formData );
formData.right = new FormAttachment( 100, -5 );

对齐由Attachment#alignment属性支持,并使用相应的SWT常量。 例如,要将控件的顶部附件调整到另一个控件的中心,请使用以下代码:

attach( control ).atTopTo( otherControl, MARGIN, SWT.CENTER );

这是另一种情况,显示了如何使用宽度提示而不是相对的侧面附件:

attach( control ).atTop().atRight().atBottom().withWidth( WIDTH );

值得一提的是, FormDatas实现并未涵盖FormDataFormAttachment所有可能性。 但是,由于我能够替换当前项目中的所有用例,因此希望能够满足更常见的用例。

从IDE的角度来看,集成FormDatas的最佳方法是将其配置为收藏 。 这样,可以通过自动处理静态导入等内容的内容辅助使用FormDatas.attach(Control)方法。

如果您想自己看看FormDatas ,那么有一个包含实现的GitHub要点 。 但是请记住,我没有花任何时间在文档,参数验证等方面。 在这方面,该实用程序是一个很粗糙的版本,可能会随着时间的推移而发展。

https://gist.github.com/fappel/9867945

要点包含FormDatas和JUnit测试用例,因为该实现旨在在生产环境中使用,因此应进行测试。

  1. FormDatas#attach(Control)基本上是一种工厂方法。 因此,实际上返回FormDatas的实例可能看起来有些奇怪。 但是,仅仅为了流利的界面风格而引入一种新类型对我来说也有点奇怪–因此,如果您有更好的主意... ↩

翻译自: https://www.javacodegeeks.com/2014/04/slim-down-swt-formlayout-usage.html

精简SWT FormLayout的用法相关推荐

  1. formlayout_精简SWT FormLayout的用法

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

  2. WindowBuilder、SWT、jface

    GUI(Graphical User Interface,简称 GUI,图形用户界面)是指采用图形方式显示的计算机操作用户界面,与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受 ...

  3. WebUI Case(1): www.swt-designer.com 首页

    本系列文章主要记录在网上发现的一些优秀的Web UI设计. 文章结构如下: (1) WebUI Case 编号 (2) WebUI Case 名称,地址 (3) 截图 (4) 源代码 (5) 评价(可 ...

  4. ThinkPHP6项目基操目录

    前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...

  5. ionic checkbox 精简用法

    在网上,看到大多数用法如下: "`js <li class="item item-checkbox item-checkbox-right"><labe ...

  6. java SWT:MouseEvent,KeyEvent中stateMask字段的用法

    SWT中与键盘鼠标等输入设备有关的事件(MouseEvent,KeyEvent,SelectionEvent GestureEvent TouchEvent)都有一个stateMask字段. 这个字段 ...

  7. sqlmap用法精简版

    2019独角兽企业重金招聘Python工程师标准>>> 基础用法: 一下./sqlmap.py 在kali和backtrack中使用sqlmap的时候,直接用:sqlmap ./sq ...

  8. SWT Display用法

    转载:https://blog.csdn.net/hangke/article/details/184201 Display处理消息机制是和底层平台相关的,以windwos平台为例 所有的系统消息首先 ...

  9. 精简DropDownList用法

    ViewBag.TypeID = new SelectList(db.TType, "ID", "Name", model.TypeID); @Html.Dro ...

最新文章

  1. 【 C 】结构体 与 typedef
  2. 十分钟了解分布式计算:GraphLab
  3. iOS开发之邮件发送代码
  4. mediastream2使用指南(转载)
  5. 第三次学JAVA再学不好就吃翔(part66)--Pattern类和Matcher类
  6. 什么是物联网?在生活中有何体现?
  7. Java-JDK:JDK百科
  8. JAVASCRIPT实现XML分页
  9. 深入解剖 linux内存管理之mmap
  10. WIN10工具栏里的Ludashi mini 怎么删除 把鲁大师卸载后 发现还有这个,怎么去掉
  11. ResizeObserver loop completed with undelivered notifications.
  12. JZOJ 4250. 【五校联考7day1附加题】路径(折半搜索)
  13. hihocoder#1369 : 网络流算法的一些小结
  14. 项目管理图表有哪些 这5种一定要知道
  15. 中央关于深化统计管理体制改革提高统计数据真实性的意见(摘要)
  16. 从概率角度来确定临界点问题
  17. mysql超链接_PHP MYSQL超链接和表单
  18. 【JavaScript】ES6 数组的扩展
  19. IDEA 报错:not supported at language level 5
  20. 机械键盘Windows键失灵,解决办法

热门文章

  1. android微信分享之视频、URL地址、表情分享
  2. 用limit 实现java的简单分页
  3. 学python后做什么工作好_学习完Python课程后可以做什么工作?
  4. 完整的MIME类型列表
  5. 为什么jdk的CLASSPATH环境变量需要设置rt.jar 和 tools.jar
  6. 优先队列——二项队列(binominal queue)
  7. 航空订票系统界面java_Java命令行界面(第21部分):航空公司2
  8. java分布式系统开发_从微服务到分布式系统-Java开发人员生存指南
  9. apache.camel_Apache Camel 2.19发布–新增功能
  10. java ee的小程序_Java EE应用程序的单片到微服务重构