写点什么

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

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

关注

评论

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

合合信息加入元脑生态 携手浪潮信息推动金融AI应用创新

合合技术团队

AI 智能时代 合合信息 人工智能’ 浪潮

破解双中台困局:万家数科 x StarRocks 数字化技术实践

StarRocks

大数据

二分查找:一种效率较高的查找方法

华为云开发者联盟

开发 二分查找 查找 区间

史上最全的Java并发系列之并发编程的挑战

自然

多线程 并发 8月月更

开源一夏 | TypeScript对于Duck类型和模块命名空间的应用实战

恒山其若陋兮

开源 8月月更

博云入选国家级专精特新「小巨人」名单!

BoCloud博云

云计算 容器 “小巨人”企业

预约直播 | 深度学习编译器技术趋势与阿里云BladeDISC的编译器实践

阿里云大数据AI技术

深度学习 阿里云 编译器

IPv5是什么意思?到底有没有IPv5?

郑州埃文科技

ipv6 互联网协议 ipv5

秒云获得阿里云首批产品生态集成认证,携手共建云原生智能运维生态服务

MIAOYUN

智能运维 智能运维AIOps 阿里云产品生态集成认证

史上最全的Java并发系列之Java并发机制的底层实现原理

自然

多线程 并发 8月月更

旺链科技成为湖南省区块链协会理事单位

旺链科技

区块链 区块链技术 产业区块链

2022年中国足球赛事营销洞察

易观分析

营销 报告 足球

【云原生】Docker 进阶 -- 数据卷使用与实战练习

Bug终结者

Docker 阿里云 云原生 8月月更

Go-Excelize API源码阅读(十)—— SetActiveSheet(index int)

Regan Yue

Go 开源 源码阅读 8月日更 8月月更

华贵保险连续五年获得“A级纳税信用企业”

江湖老铁

终于!极狐GitLab 支持 ARM 啦!

极狐GitLab

DevOps 敏捷开发 arm 极狐GitLab 嵌入式硬件

这次6张图带你彻底搞懂RocketMQ是怎么保存偏移量的?

程序员小毕

Java 程序员 面试 RocketMQ 消息中间件

迄今为止把Mybatis讲解的最详细的PDF,图文并茂,通俗易懂

冉然学Java

Java 编程 程序员 mybatis 构架

数据说|数字经济,山东16市谁最“炫”?排行榜来了

易观分析

数字经济 山东

CSO视角:Sigstore如何保障软件供应链安全?

SEAL安全

软件供应链安全 OpenSSF

大数据程序员参加培训好还是自学好

小谷哥

java就业培训班如何选择?

小谷哥

面试的朋友听我说,18个MyBatis高频知识及学习笔记,双手奉上

冉然学Java

Java 源码 分布式 mybatis 构架

开源公开课丨ChunJun数据传输模块介绍

袋鼠云数栈

计算机专业和培训出来的前端程序员的区别

小谷哥

大数据培训学习软件工程师机构靠谱吗

小谷哥

史上最全的Java并发系列之Java并发容器和框架

自然

多线程 并发 8月月更

表达式转换-中缀转后缀表达式后计算-数据结构与算法

清风莫追

算法与数据结构 8月月更

过等保费用包含哪些?大概多少钱?

行云管家

等保 等级保护 过等保

Alluxio on Amazon EMR 集成实践

亚马逊云科技 (Amazon Web Services)

实践 集成 Tech 专栏

前端培训学完课程后如何找工作?

小谷哥

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