写点什么

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

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

关注

评论

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

极限科技(INFINI labs)荣获中国信通院大数据“星河”标杆案例

极限实验室

中国信通院 极限科技 “星河”标杆案例

什么是 DDoS ?如何识别和应对DDOS攻击

德迅云安全杨德俊

Web 安全 DDoS

虾皮Shopee商品详情API:电商实时数据获取的关键

Noah

灯具照明行业智能制造MES系统解决方案

万界星空科技

数字化转型 工业互联网 mes 智能照明 灯具mes

Word LTSC 2021中文激活版+许可密钥

mac大玩家j

word office办公软件 Mac软件 Word 2021 许可证

变革自然语言处理的新型大模型架构

百度开发者中心

nlp 大模型

微店商品API:电商的实时数据利器

Noah

软件测试/测试开发/人工智能丨GraphWalker自动化测试用例生成

测试人

人工智能 软件测试

万界星空MES安灯管理:优化生产监控的重要工具

万界星空科技

数字化转型 mes 安灯系统 mes安灯管理 生产管理

在CentOS上搭建NFS服务器

麦兜

更快内存、更大缓存,第五代英特尔至强可扩展处理器为多元工作负载提供出色性能

E科讯

NFTScan | 12.11~12.17 NFT 市场热点汇总

NFT Research

NFT NFT\ NFTScan nft工具

《实现领域驱动设计》笔记——架构

EquatorCoco

架构 DDD 技术架构

Amazon CodeWhisperer 在 vscode 的应用

亚马逊云科技 (Amazon Web Services)

人工智能 云上探索实验室 Amazon CodeWhisperer

mac强大的音视频转换器:Permute 3激活中文最新版

胖墩儿不胖y

Mac软件 音视频转换器 音视频格式转换

本周六下午【 TiDB 社区交流活动 上海站】 数据库运维有话聊,谈谈你了解的灾备实践,参会即可获得社区周边 3 件套

TiDB 社区干货传送门

#数据库

万界星空科技线束行业MES系统

万界星空科技

数字化转型 工业互联网 mes 线束行业 线束mes

finally中的代码一定会执行吗?

王磊

Java 面试题

5个免费、跨平台的SQLite数据库可视化工具

不在线第一只蜗牛

sqlite sql 开源 数据可视化

基于Stable Diffusion的智能绘画大模型

百度开发者中心

人工智能 大模型

社招邀请|阿里云热招岗位简历投递中!

阿里云视频云

云计算

TDengine 签约中船九院,助力航运业智能化转型升级

TDengine

tdengine 时序数据库 国产时序数据库

天猫商品详情接口json 格式返回介绍

tbapi

天猫商品详情数据接口 天猫商品API接口 天猫API接口

米哈游宣布启动鸿蒙原生应用开发

新消费日报

Shopee解析商品详情SKU方法丨ShopeeAPI接口封装指南

tbapi

Shopee 虾皮商品详情接口 shopee商品数据接口 shopee商品详情数据接口 shopee API

未来LED全彩显示屏的发展趋势研究

Dylan

屏幕亮度 LED LED显示屏 户外LED显示屏

你的JoinHint为什么不生效

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 华为云GaussDB(DWS)

集成开发环境(IDE)的用途?

小魏写代码

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