限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

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

关注

评论

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

利用Kafka,实时挖掘企业数据的价值

NineData

MySQL oracle kafka NineData 数据管道

智源研究院与百度达成战略合作 共建AI产研协同生态

智源研究院

【YashanDB知识库】YAS-04110 invalid variant name

YashanDB

yashandb 崖山数据库 yashandb知识库

NLP技术在营业选址中的实践与探索

鲸品堂

大模型 企业号2024年9月PK榜

RTE大会报名丨 重塑语音交互:音频技术和 Voice AI,RTE2024 技术专场第一弹!

声网

数据飞轮:驱动企业持续增长的新引擎

松子(李博源)

数据分析 增长 #大模型

声网发布 aPaaS 灵动会议:RTE + AI,打造下一代会议产品

ToB行业头条

【YashanDB知识库】查询YashanDB表空间使用率

YashanDB

yashandb 崖山数据库 yashandb知识库

微信技术总监谈架构:微信之道——大道至简(演讲全文)

JackJiang

即时通讯;IM;网络编程

API 蔓延问题出现的六大迹象

NGINX开源社区

读书笔记 程序员 个人成长 最佳实践 API Gateway

mac苹果电脑奈飞客户端:Netflix Mac 激活版

你的猪会飞吗

Netflix Mac激活版 Netflix客户端 Netflix mac版破解版下载

Rainbond 助力城建智控,从传统开发到敏捷开发转型

北京好雨科技有限公司

云原生 k8s rainbond 企业号9月PK榜

实时邮政快递查询:用 Python 轻松跟踪包裹动向

幂简集成

API 快递

python中的小坑

SkyFire

Python 浅拷贝

美团VS饿了么,到底谁更胜一筹?

王中阳Go

美团 面经 饿了么 面试问题

【YashanDB知识库】客户端字符集与数据库字符集兼容问题

YashanDB

yashandb 崖山数据库 yashandb知识库

【YashanDB知识库】如何配置jdbc驱动使getDatabaseProductName()返回Oracle

YashanDB

yashandb 崖山数据库 yashandb知识库

基础的点云转换

芯动大师

点云转换

解锁新型旅游方式, 当代人的出游体验究竟多丝滑

最新动态

如何更高效传输非结构化数据?Zilliz 推出全新数据迁移服务

Zilliz

AI 数据迁移 向量数据库

三明市等保测评机构有几家?在哪里?

行云管家

等保 等保测评 三明企业

阿里巴巴商品详情API返回值中的商品标签与关键词

技术冰糖葫芦

api 货币化 API 接口 API 测试 pinduoduo API

支持离线模式:iOS 移动应用程序的关键策略和优势

哦豁完蛋了

ios

基于Sentinel自研组件的系统限流、降级、负载保护最佳实践探索

京东科技开发者

这样的SQL太吓人了

江南一点雨

云资源高效运维就用云管平台!

行云管家

云计算 云管平台 云资源

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