写点什么

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

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

关注

评论

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

传帮带 人才梯队建设经验总结(16)

万里无云万里天

人才培养 工业 工厂运维

工业设计 自控设计经验总结(17)

万里无云万里天

设计师 工业 工厂运维

ShardingSphere 联邦查询 GROUPING 聚合结果问题分析

端小强

#Calcite

Fork for Mac Git客户端管理工具

做梦万元户

Aspire开启云原生开发新纪元:微软推出多语言应用开发平台

qife122

云原生 Aspire

LLM 训练基础概念与流程简介

地平线开发者

自动驾驶; 算法工具链 地平线征程6

进入新岗位的第一课——潜龙勿用

老李说技术

职场新人 职场发展 职场妙招

2025年最佳AI摘要追踪工具全解析

qife122

AI搜索 搜索引擎优化

过程控制 软件维护经验总结(9)

万里无云万里天

工业 工厂运维 过程控制

智能车间管理系统:数字化驱动的车间全流程管控生态

深圳亥时科技

司马阅将亮相第二十七届中国国际高新技术成果交易会,助力企业AI在严肃场景中精准落地!

司马阅

资本、开发者入局指南:鸿蒙生态的“高潜力赛道”找到了!

最新动态

Spring AI,一个让Spring应用轻松拥抱AI的统一框架

六边形架构

Java Spring AI LLM应用开发 Java大模型开发 Java接入大模型

2025年第39周数字取证与事件响应技术动态汇总

qife122

网络安全 数字取证

C#/.NET/.NET Core优秀项目和框架2025年10月简报

追逐时光者

.net

全栈协同 生态共筑——未来物联网开发者论坛深圳启幕,解码开发者落地新路径

新消费日报

GitHub 快速入门指南,新手必备的高效使用手册!

追逐时光者

GitHub

工业管理 项目管理经验总结(28)

万里无云万里天

项目管理 工业 工厂运维

PCalc for Mac 万能计算器

做梦万元户

Vibe Coding - 零成本使用claude code 、gpt-5、grok-code-fast-1氛围编程

小工匠

vibe coding grok gpt-5 Claude Code

CodeBuddy IDE 携手 Lighthouse 实现从设计、代码到部署全流程

六月的雨在InfoQ

CodeBuddy CodeBuddyIDE 无界生成力 CodeBuddyCode

AI 生成代码,从 Copilot 到 Claude Code 的全景测评

掘金安东尼

Camsys 时间戳信息简介

地平线开发者

自动驾驶; 算法工具链 地平线征程6

真正“懂你”的输入法长什么样?讯飞用AI键作答

脑极体

AI

大数据-147 Java 访问 Apache Kudu:从建表到 CRUD(含 KuduSession 刷新模式与多 Master 配置)

武子康

Java 大数据 spark 分布式 Apache Kudu

大数据-146 Apache Kudu Docker 快速部署:3 Master/5 TServer 实战与踩坑速查

武子康

大数据 flink spark 分布式 Apache Kudu

浅析iGIX多语列的实现

inBuilder低代码平台

jpa 国际化 spring data 多语言支持 iGIX

PyPI发布GitHub Action存在可注入表达式扩展漏洞

qife122

Github Actions 命令注入

CSRF令牌保护的绕过技术详解

qife122

漏洞挖掘 CSRF攻击

Redis 搭建主从复用-读写分离和主备切换,及重要的关键词解释 部分3

刘大猫

人工智能 云计算 算法 物联网 大模型

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