摘自http://tech.it168.com/a2009/0211/265/000000265087_all.shtml

摘自http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7386c88c7150885ce178e320c051038bef970625559939c3d7a50f35404b9b4656f6f1420c1c49fc848d6b89729329c6269304a8900509342f39e5124b17ec311b4e85f&p=cb759a46d7c059fc57efcd605753c1&newp=836cc54ad5c242e019bac7710f528d231610db2151d7da1f6b82c825d7331b001c3bbfb423231406d1c47b620baf425debf23c7637012ba3dda5c91d9fb4c57479c76663&user=baidu&fm=sc&query=SpringLayout&qid=c854ccd90002264b&p1=5

Merlin 的魔力: SpringLayout 管理器

当 GridBagLayout 不够用的时候

当设计复杂的界面时,许多开发人员总是避免使用功能强大的 GridBagLayout 管理器。他们不去摆弄 GridBagConstraints ,而是使用像 BorderLayout 这样的其他布局管理器来将面板嵌入到面板中。最新引入的 SpringLayout 管理器提供了一种可选方式,其中的组件可以相对于其他组件进行放置。在本文中, Merlin 行家 John Zukowski 向您展示了如何使用这种新的布局管理器。请在 讨论论坛上与作者及其他读者共享您对本文的一些想法(也可以点击文章顶部或底部的 讨论来访问论坛)。

 

在 Java 布局管理器方面,最新增加了 SpringLayout 管理器,它是与 Java 1.4 一起发布的。这种布局管理器允许您将“spring”附加到组件上,这样组件就可以相对于其他组件进行布局。例如,利用 SpringLayout 您可以让一个按钮依附于右边框来进行显示,而不管用户将屏幕宽度设为多大。

  开始使用 SpringLayout

最简使用方法见最下边,标黄色的清单 4. 完整的 SpringLayout 实例

  与所有布局管理器一样, SpringLayout 管理器负责安排组件的位置。组件的位置是通过为之提供相关联的约束来进行控制的。对于 SpringLayout 控制的组件,有一个带有 4 个设置值的约束 -- 每个设置值对应于组件的每条边。 SpringLayout 管理器依赖一个 SpringLayout.Constraints 对象来提供这些组件约束。这与 GridBagConstraints 类的工作原理有点类似, GridBagConstraints 类补充了 GridBagLayout 管理器:每个添加到容器中的组件都可以有一个依附在其上的 SpringLayout.Constraints 对象。不过,两者的相似之处仅此而已。

  在使用 GridBagLayout的时候 ,您通常的做法是使用约束将组件添加到容器中。在使用 SpringLayout 管理器的情况下,您通常不必使用约束来添加组件。相反,您可以直接添加组件,然后再分别地为之附加约束。除了 SpringLayout 外,没有什么可以阻止您为组件添加约束 。Constraints 不是一个简单的类。它是 Spring 对象(用于每条边)的一个集合。当您使用 SpringLayout.Constraints 类时,您需要分别地将每个 Spring 约束添加到 SpringLayout.Constraints 。您是通过对组件的某一条边设置特定的约束来向 SpringLayout.Constraints “添加”约束的。通过使用 EAST 、 WEST 、 NORTH 和 SOUTH 这 4 个 SpringLayout 常量,您可以调用 SpringLayout.Constraints 的 setContraints(String edge, Spring spring) 方法,其中 String 类型的参数是 4 个常量中的一个。例如,如果您想将一个组件添加到一个容器的顶部偏左的位置,那么可以建立两个大小固定的 spring,将它们组合起来,然后将组件添加到带有这样组合而成的 spring 集的容器中,如清单 1 所示:

  清单 1. 使用 SpringLayout

         

  这看上去不是特别难,但是当您需要添加下一个组件时,不管是添加到第一个组件的右边还是下面,事情都要更难办一些。您不能简单地在 n 像素外添加组件;实际上,您必需为早先的组件添加 padding(补白)。为了找出前一个组件的边,您可以使用 getConstraint() 方法请求布局管理器,为该方法传递您所针对的边和组件,例如 layout.getConstraint(SpringLayout.EAST, left) ,以此来获得第一个组件的正确的边的位置。从这个位置,您可以加进必需的 padding,并将其附加到其他组件的边上,如清单 2 所示:

  清单 2. 使用 SpringLayout 添加第二个组件

        
 
 

这种方法非常有效,但是如果组件的数量多起来的话,这种方法就显得单调乏味了。相反,另一种回避中间步骤的方法是先不带约束地直接添加组件,然后再分别地添加约束,使用 SpringLayout 的 putConstraint() 方法将约束连接到组件,如清单 3 所示:

  清单 3. 用 SpringLayout 添加第二个组件

    

  这里,您无需请求组件的边并自己加进 padding, putConstraint() 方法调用为您同时处理了这两个任务。为了演示这一点,清单 4 像清单 3 那样向正确的组件添加了同样的约束,不过这里使用的是 putConstraint(), 而不是直接使用 SpringLayout.Constraints :

  清单 4. 使用 putConstraint() 添加第二个组件

              

  putConstraint() 方法中的 String 类型参数是 4 个 SpringLayout 常量 EAST、WEST、NORTH 和 SOUTH。当使用 putConstraint() 时,应首先确信指定了未知组件的位置,并将其连接到某样可以计算的或者固定的东西上,比如屏幕的边界。

  用 BeanBuilder 试验 SpringLayout

  为了帮助您亲历 SpringLayout 的用法,Sun 提供了一个名为 BeanBuilder 的工具(参阅 参考资料)。当使用 JavaBeans 组件时,该工具还有更多的用处,不过它也为研究 SpringLayout 提供了一种简单的方式。图 1 展示了该工具启动时的样子:

  图 1. BeanBuilder 启动屏幕

  虽然我们不打算讨论 BeanBuilder 工具的细节,但是关于这个工具有一个地方是要谈到的,那就是使用 SpringLayout 连接组件。在每个组件的各条边上共有 4 个小方框,分别对应 north(北)、south(南)、east(东) 和 west(西)。您可以从一个小方框中拖出一个箭头,将其连接到任何其他的小方框。如果该工具再高级一点,它将允许您指定间隙宽度,但是图 2 显示的是在开发阶段的一个屏幕:

  图 2. BeanBuilder 使用屏幕

  由图 2 可以说明,您可以可视化地将箭头连接到一个指定的 putConstraint() 调用。

pasting

为了演示 SpringLayout 的用法,清单 4 给出了 SpringFormTest 程序,该程序将前面解释过的使用 putConstraint() 的代码片断拼接起来。

  清单 4. 完整的 SpringLayout 实例

                         

  图 3 显示了结果:

  图 3. SpringFormTest 实例屏幕

 

伸展后截图

Merlin 的魔力: SpringLayout 管理器的更多相关文章

  1. Java基础之创建窗口——使用SpringLayout管理器(TrySpringLayout)

    控制台程序. 可以把JFrame对象aWindow的内容面板的布局管理器设置为javax.swing.SpringLayout管理器. SpringLayout类定义的布局管理器根据javax.swi ...

  2. Java Swing 第03记 布局管理器

    几种Swing常用的布局管理器 BorderLaout 它将容器分为5个部分,即东.南.西.北.中,每一个区域可以容纳一个组件,使用的时候也是通过BorderLayout中5个方位常量来确定组件所在的 ...

  3. Java可视化编程,基于布局管理器的UI设计

    在<事件驱动模型>讲述了如何将用户与功能实现代码联系到一起.怎么样便于用户理解和符合用户的使用习惯? 本篇还是就此问题作分析,站在用户角度上分析UI各组件倒底该如何设计呈现. 优秀的UI会 ...

  4. Sublime Text 3中文乱码解决方法以及安装包管理器方法

    一般出现乱码是因为文本采用了GBK编码格式,Sublime Text默认不支持GBK编码. 安装包管理器 简单安装 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令 ...

  5. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  6. 定时管理器框架-Task.MainForm

    入住博客园4年多了,一直都是看别人的博客,学习别人的知识,为各个默默无私贡献自己技术总结的朋友们顶一个:这几天突然觉得是时候加入该队列中,贡献出自己微弱的力量,努力做到每个月有不同学习总结,知识学习的 ...

  7. Swing布局管理器介绍

    创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/128174 当选 ...

  8. Node.js包管理器Yarn的入门介绍与安装

    FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...

  9. python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)

    0.关于上下文管理器上下文管理器是可以在with语句中使用,拥有__enter__和__exit__方法的对象. with manager as var: do_something(var) 相当于以 ...

随机推荐

  1. Linux一个简单的读写文件

    (1)linux中的文件描述符fd的合法范围是或者一个正正数,不可能是一个负数. (2)open返回的fd程序必须记录好,以后向这个文件的所有操作都要靠这个fd去对应这个文件,最后关闭文件时也需要fd ...

  2. day54

    今天复习时间15个小时 那都做了什么呢 数学2000试卷 阅读2篇整理 翻译2个视频 政治背诵加视频 数学综合5个证明 作文两篇 c语言结构体以及简单总结 博客园日记 数据结构 好了 感觉也没有做什么 ...

  3. 弹出框layer的使用封装

    layer弹出框官方网址:http://layer.layui.com/ layer常用方法的封装:layerTool.jsp layer.config({ extend: 'extend/layer ...

  4. 在CentOS 7上利用systemctl加入自己定义系统服务

    CentOS 7继承了RHEL 7的新的特性,比如强大的systemctl,而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的执行效率 ...

  5. MVC4 成员资格、 身份验证

    SimpleMembership,成员资格提供程序. 通用的提供者和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板 ASP.NET MVC 4 互联网模板中添加一些新的 ...

  6. [Node.js] Using ES6 and beyond with Node.js

    If you're used to using all the latest ES6+ hotness on the front end via Babel, working in Node.js c ...

  7. Android中的菜单

    本文参考自官方文档:https://developer.android.com/guide/topics/ui/menus.html Android为了维护app之间一个统一的操作习惯,提供了Menu ...

  8. docke 网络配置

    一,docker 的bridge模式是和vmware中的nat模式类似的,但是如果想要弄成和vmwae中的bridge怎么办呢? 说明,bridge模式获取的Ip是与宿主机的ip是出于同一个网段的. ...

  9. CoreText中坐标转换的一些理解

    引言 学习CoreText,最初的想法是写一个杂志类的应用,因为对网易和zarca应用一些技术的疑问,所以,自己有了很强的兴趣欲和钻研欲,开始这段有点不顺的学习过程. 难题 1.对CGContextR ...

  10. 五种常见的ASP.NET应用程序安全缺陷

    下面给出了五个例子,阐述如何按照上述建议增强应用程序的安全性.这些例子示范了代码中可能出现的缺陷,以及它们带来的安全风险.如何改写最少的代码来有效地降低攻击风险.1 篡改参数◎ 使用ASP.NET域验 ...