在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

关于软件系统的帮助文档页面,你该知道的那些事儿

Baklib

帮助文档

穿越周期性调整 英特尔多举措布局半导体产业

科技之家

“程”风破浪的开发者|【模块-Java布局】十分钟挑战鸿蒙Codelab组件

liuzhen007

OpenHarmony “程”风破浪的开发者

极客时间运维进阶训练营第二周作业

好吃不贵

SAP | 如何全局处理消息文本

暮春零贰

SAP 10月月更 动态消息

企业数据上云,怎能少的了华为云企业交换机ESW?

科技怪授

ESW

流式计算常见的开源实现

穿过生命散发芬芳

10月月更 流式计算

如何引发一场信创负载均衡领域的大变革?

通明湖

负载均衡 信创

英特尔财报彰显系统级代工渐成气候

科技之家

用芯弹一首《大加洛普舞曲》:从AI-ISP,透视vivo的双芯之路

脑极体

SAP | ABAP程序结构中的处理块

暮春零贰

SAP 模块化 10月月更

NFT质押挖矿分币系统开发模式定制

开发微hkkf5566

拒绝繁琐,华为云企业交换机ESW就是要让数据上云一步到位

科技怪授

ica

一文看懂Htmx

天择

JavaScript htmx

企业上云也可以很智能,智能云接入ICA替企业搭建“上云梯”

科技怪授

ica

千锋大连“匠心8载 感谢有你”周年庆典隆重举行

千锋IT教育

极光笔记 | 极光clickhouse千亿级数据分析实践之路

极光GPTBots-极光推送

政务数据安全解决方案

前嗅大数据

政务 基础数据方案 数据方案

11 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

培训与认证

阿里最新产,SpringCloud微服务核心技术全解手册Github星标50k

程序员小毕

Java 微服务 后端 SpringCloud springcloudAlibaba

网络安全hw蓝队实战之溯源

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

可观测可回溯 | Continuous Profiling 实践解析

阿里巴巴云原生

阿里云 云原生 可观测

首次!龙蜥社区生态用户实践精选集发布在即

OpenAnolis小助手

开源 龙蜥社区 生态伙伴 厂商 案例集

华为云智能云接入ICA,让世界距离更近

科技怪授

ica

千锋沈阳前端怎么样?学员真实案例

千锋IT教育

消失与存续——应用交付行业的跌宕演进

通明湖

负载均衡 高可用 云原生 信创

Flink 读写多套 Kerberos 认证的 Kafka 方案

移动云大数据

浅谈长连接负载均衡

捉虫大师

负载均衡 长连接 10月月更

ALL in ONE!博睿数据隆重举行ONE 2.0全面上线仪式

博睿数据

可观测性 智能运维 博睿数据 ONE平台

可观测实践|如何使用阿里云 Prometheus 观测 ECS 应用

阿里巴巴云原生

阿里云 云原生

想在杭州学前端,千锋IT培训怎么样?学员真实案例

千锋IT教育

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