InfoQ

新闻

使用Profligacy和LEL创建Wiki风格的GUI布局

作者 Werner Schuster 译者 Jason Lai 发布于 2007年7月13日 上午10时0分

社区
Ruby,
Java
主题
JRuby,
动态语言,
领域特定语言
标签
Swing,
JRuby,
GUI

自从AWT面世以来,为Java创建GUI布局就成为了人们的一块心病,有许多LayoutManager(布局管理器)因此应运而生,然而它们之中没有一个能够完全解决需要手动干预编写布局代码的问题。实际上,最近加入的GroupLayout颇为适用于在类似Matisse这样的GUI Builder进行配置。

最近,人们又把眼光投向了JRuby。Mongrel创始人Zed Shaw创建了一套JRuby GUI类库,名为Profligacy(在InfoQ刚刚推出的一篇报导中,我们就对JRuby GUI类库Profligacy、Cheri和Swiby进行了介绍)。这套类库包含了布局表达式语言(Layout Expression Language,LEL),用于解决GUI布局问题。

LEL使用Wiki风格的格式化语言,以文本形式定义布局。这使得我们可以用一个简洁的字符串来描述布局规格,而不比长篇累牍编写很多行代码来指明约束或者创建面板层次结构。这门语言使用以Ruby类库Ragel编写的解析器进行解析。

示例代码如下:

layout = "
[ label_1 | label3 ]
[ (300,300)*text1| (150)people ]
[ <label2 | _ ]
[ message | buttons ]
"

这段代码创建了一个布局,并以为布局元素建立命名占位符的方式,将布局从实际组件的创建中解耦出来。随后,我们使用下面一小段Ruby代码把布局和组件联系起来:

ui = Swing::LEL.new(JFrame, layout) do |c, i|
c.label_1 = JLabel.new "The chat:"
c.label2 = JLabel.new "What you're saying:"
c.label3 = JLabel.new "The people:"
c.text1 = JTextArea.new
c.people = JComboBox.new
c.message = JTextArea.new
# we'll replace this later with a subcomponent
c.buttons = JPanel.new
end

定义在布局规格中的占位符(label_1text1等等)通过名称引用和相应的组件关联起来,这种方法使用了Ruby的元编程(metaprogramming)特性。

尽管还有不少其它的布局管理器使用文本布局约束的方式(比如说MigLayout),但Profligacy和LEL通过使用Ruby的特性,向人们展示辅助GUI编程的一种很有趣的方式。LEL并不是专用于某个特定的布局管理器的,但当前的版本使用GroupLayout来创建GUI。

查看英文原文:Wiki-style GUI Layout with Profligacy and LEL

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。