写点什么

使用 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:00977
用户头像

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

关注

评论

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

React源码中的dom-diff

夏天的味道123

React

Webpack中的plugin插件机制

Geek_02d948

webpack

详解webpack构建优化

Geek_02d948

webpack

可观测实践|如何利用 Prometheus 精细化观测云产品

阿里巴巴云原生

阿里云 云原生 Prometheus

Wallys Routerboard DR40x9 IPQ4019 IPQ4029 ,802.11AC 2x2 2.4G&5G Support HTTPS Support all the modules of Quectel

Cindy-wallys

9个GaussDB常用的对象语句

华为云开发者联盟

数据库 后端 华为云 企业号十月 PK 榜

从延迟处理讲起,JavaScript 也能惰性编程?

掘金安东尼

前端 11月月更

React核心技术浅析

夏天的味道123

React

Vue3知识点之数据侦测

yyds2026

Vue

现在加入写作社区,惊喜等你开启!

InfoQ写作社区官方

热门活动

热备与冷备分别是什么意思?怎么通俗理解?

行云管家

高可用 热备 冷备

Wallys/industrial wifi6 router/Support OpenWRT /2×2 2.4G&5G

Cindy-wallys

从软件工程角度看测试

老张

软件工程 质量保障

【LeetCode】验证栈序列Java题解

Albert

算法 LeetCode 11月月更

大数据培训自学怎么样?

小谷哥

React-hooks+TypeScript最佳实战

xiaofeng

React

前端培训机构学习比较好的方法

小谷哥

java程序员培训和自学的区别

小谷哥

为何大企业都纷纷选择低代码做数字化转型?

优秀

数字化 低代码开发

想开发DAYU200,我教你

华为云开发者联盟

开发 华为云 开发板 企业号十月 PK 榜 富设备

React-diff原理及应用

xiaofeng

React

Webpack中的高级特性

Geek_02d948

webpack

【云服务器】云服务器哪家好用便宜服务好?

行云管家

云计算 企业上云 云服务器 行云管家

React中常见的TypeScript定义实战

xiaofeng

React

前端线下培训和线上培训学习哪个更好?

小谷哥

Sprint产品待办列表的优先级要怎么排?

敏捷开发

项目管理 敏捷开发

从算力突破到应用全面开花,英特尔与阿里云那些不可不提的合作

科技之家

深入浅出文件系统新形态

焱融科技

云计算 高性能 文件存储

web前端培训有哪些比较好?

小谷哥

Vue3必会技巧-自定义Hooks

yyds2026

Vue

Vue3, setup语法糖、Composition API全方位解读

yyds2026

Vue

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