写点什么

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

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

关注

评论

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

18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的

鲁米

为什么6层板最好设计2个接地层?

华秋电子

Amazon CodeWhisperer 开箱初体验

亚马逊云科技 (Amazon Web Services)

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

[译]你应该知道的多个HTML属性

南城FE

html html5 前端

喜报!乘云数字获浙江省“专精特新”企业认定

乘云数字DataBuff

鸿蒙原生应用开发——分布式数据对象

HarmonyOS开发者

HarmonyOS

4点搞定Type-C接口的PCB可制造性设计优化!

华秋电子

PCB

工业数据存储的“四道难关”,国产数据库如何应势破局?

用友BIP

app开发

Geek_8da502

聚首江城,共创开源未来 | 2023 OpenHarmony城市推介会•武汉市圆满落幕

科技热闻

小程序开发实战案例之三 | 小程序底部导航栏如何设置

盐焗代码虾

前端 支付宝 小程序开发 导航栏

Mac电脑强大的文件夹快速访问工具:Default Folder X 最新激活

胖墩儿不胖y

Mac软件 文件访问工具 文件夹管理软件

探秘 Spring Boot Async:解析原理与实践详解

Apifox

性能优化 Spring Boot 后端 多线程 Async

使用 Kubernetes 为 CI/CD 流水线打造高效可靠的临时环境

SEAL安全

Kubernetes CI/CD 临时环境

华秋DFM软件荣获2023年度电子信息行业可靠性质量提升典型案例

华秋电子

软件

医院检验科LIS系统源码,oracle数据库、报告管理、质控管理

源码星辰

一起学Elasticsearch系列-模糊搜索

Java随想录

Java 大数据 elastic

文心一言 VS 讯飞星火 VS chatgpt (152)-- 算法导论12.2 8题

福大大架构师每日一题

福大大架构师每日一题

强强联合!航天科技AIRIOT助力航天电工打造智慧工厂

AIRIOT

IOT Platform 智慧工厂

避坑指南之财务共享中心的服务管理

用友BIP

财务共享

直播预告|StarRocks 3.2 全面解读:易用性和性能的双重提升

StarRocks

数据库 数据分析 OLAP StarRocks

中山大学数学学院 x 赛博威 | 共同成立人工智能算法产学研合作基地

赛博威科技

人工智能 赛博威 中山大学 人工智能算法

ETL+BI结合的数据集成工具

RestCloud

BI ETL 数据集成

华秋喜获“2023深圳行业领袖企业100强”称号

华秋电子

现在甘肃等保测评机构有几家?分别是哪几家?

行云管家

等级保护 等保测评 甘肃

通过线上巡检,保障生产环境质量

老张

软件测试 质量保障

Future3 Campus访谈丨资本是如何看待AI+Web3的?

Footprint Analytics

AI web3

Amazon S3 Glacier 将检索大量存档数据时的还原吞吐量提升高达 10 倍

亚马逊云科技 (Amazon Web Services)

S3 API 云存储服务 Amazon S3 Glacier

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