写点什么

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

  • 2007-07-13
  • 本文字数:941 字

    阅读完需:约 3 分钟

自从 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 = "<br></br> [ label_1 | label3 ]<br></br> [ (300,300)*text1| (150)people ]<br></br> [ <label2 | _ ]<br></br> [ message | buttons ]<br></br>"这段代码创建了一个布局,并以为布局元素建立命名占位符的方式,将布局从实际组件的创建中解耦出来。随后,我们使用下面一小段 Ruby 代码把布局和组件联系起来:

ui = Swing::LEL.new(JFrame, layout) do |c, i|<br></br> c.label_1 = JLabel.new "The chat:"<br></br> c.label2 = JLabel.new "What you're saying:"<br></br> c.label3 = JLabel.new "The people:"<br></br> c.text1 = JTextArea.new<br></br> c.people = JComboBox.new<br></br> c.message = JTextArea.new<br></br> # we'll replace this later with a subcomponent<br></br> c.buttons = JPanel.new<br></br>end定义在布局规格中的占位符(label_1text1等等)通过名称引用和相应的组件关联起来,这种方法使用了 Ruby 的元编程(metaprogramming)特性。

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

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

2007-07-13 10:001231
用户头像

发布了 117 篇内容, 共 20.5 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

Mybatis开发要点-resultType和resultMap的区别?

Java 程序员 后端

MySQL 千万数据量深分页优化

Java 程序员 后端

MySQL入门篇

Java 程序员 后端

MyBatis官方文档-XML 配置

Java 程序员 后端

MyBatis逆向工程Generator和IDE Plugin

Java 程序员 后端

MYSQL-连接查询算法:JOIN语句在-MYSQL-内部到底是怎么执行的

Java 程序员 后端

MySQL基础学习手册

Java 程序员 后端

MySQL 事务隔离级别

Java 程序员 后端

MySQL 千万数据量深分页优化(1)

Java 程序员 后端

MySQL基础总结

Java 程序员 后端

MyBatis常用标签和注解(绝对经典)

Java 程序员 后端

MyCat:第四章:Mycat中的概念(1)

Java 程序员 后端

MySQL没有RowNum,那我该怎么按“行”查询或删除数据?(1)

Java 程序员 后端

mybatis常用注解(绝对经典)

Java 程序员 后端

MyCat1

Java 程序员 后端

MySQL 5

Java 程序员 后端

mysql分表spring拦截器进行日志采集

Java 程序员 后端

MySQL 数据库开发入门(四):MySQL 的数据引擎

Java 程序员 后端

mysql常用函数,mysql进阶

Java 程序员 后端

MySql数据引擎简介与选择方法

Java 程序员 后端

Mybatis如何执行Select语句,你真的知道吗?

Java 程序员 后端

mybatis映射器组件

Java 程序员 后端

MyBatis详解(二):mybatis开发dao

Java 程序员 后端

MyCat教程【安装及配置介绍】

Java 程序员 后端

mysql-排它锁之行锁、间隙锁、后码锁

Java 程序员 后端

MySQL原理 - InnoDB引擎 - 行记录存储 - Off-page 列

Java 程序员 后端

MySQL最全整理,1200页文档笔记,从高级到实战讲的太清楚了

Java 程序员 后端

MyBatis初级实战之二:增删改查

Java 程序员 后端

MyBatis的Mapper接口以及Example的实例函数及详解

Java 程序员 后端

MyCat:第四章:Mycat中的概念

Java 程序员 后端

MYSQL 分组排名

Java 程序员 后端

使用Profligacy和LEL创建Wiki风格的GUI布局_Java_Werner Schuster_InfoQ精选文章