频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源: 作者:InfoQ Jason Lai 出处:巧巧读书 2008-02-09 进入讨论组

    自从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)特性。

原文地址:http://www.infoq.com/cn/news/2007/07/profligacy-and-lel

转载保留:http://www.qqread.com/java/2008/02/u396597.html进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章